VBAには高度なイベントモデルがありません。代わりに、サブはその結果を決定する必要があることを特定の引数を渡して、共通のサブプロシージャを作成し、呼び出すことができます。パラメータは文字列である必要はありません
Private Sub CommandButton1_Click()
Call Clicker("A1")
End Sub
Private Sub CommandButton2_Click()
Call Clicker("A2")
End Sub
Private Sub Clicker(sRange As String)
'MsgBox sRange
Range(sRange).Value = "Good"
End Sub
、それは可能性がありa Range
。
値 "A1"などは、(引数として渡すのではなく)フォームのプロパティとして格納して取得することができます。値(s)は、クリックされた固有である可能性が高いとして、
Private Sub Clicker()
MsgBox ActiveControl.Name
'do something according to the name
End Sub
私はこれが好きではないし、最初の選択肢を好む:
可能な代替はActiveControl
をチェックし、それに応じて動作するようにですボタンをクリックします(ボタンの名前が変わることがあります)。関連するボタンがアクティブでなくてもコードを呼び出すことができます。
第3の選択肢は、独自のカスタムクラスとイベントモデルを作成することです。これにはいくつかの調査が必要です。
ここでユーザーフォームのカスタムプロパティを使用した例である。
Private sCellOfInterest As String
Private Property Get CellOfInterest() As String
CellOfInterest = sCellOfInterest
End Property
Private Property Let CellOfInterest(ByVal sRange As String)
sCellOfInterest = sRange
End Property
Private Sub CommandButton1_Click()
CellOfInterest = "A1"
Call Clicker2
End Sub
Private Sub CommandButton2_Click()
CellOfInterest = "A2"
Call Clicker2
End Sub
Private Sub Clicker2()
MsgBox CellOfInterest
End Sub
は再び、プロパティは、オブジェクトではなく、文字列であってもよいし、Property Set
はProperty Let
ではなく、使用されるであろう。
こんにちはAndy G あなたの答えは、excel vbaのコードを大幅に短縮しました。 ありがとうございます。 – kan