VBA verfügt nicht über ein ausgeklügeltes Ereignismodell. Stattdessen können Sie erstellen, und rufen, ein gemeinsames Unter Verfahren, das insbesondere Argument übergeben (n), dass die Unter seinem Ergebnis bestimmen muss:
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
Der Parameter hat keinen String sein, könnte es sein, a Range
.
Oder der Wert „A1“ usw., könnte gespeichert und abgerufen wird, als Eigenschaft der Form (anstatt es als Argument übergeben).
Eine mögliche Alternative ist die ActiveControl
und dann verhalten sich entsprechend zu überprüfen:
Private Sub Clicker()
MsgBox ActiveControl.Name
'do something according to the name
End Sub
Ich mag das nicht und die erste Alternative bevorzugen, da der Wert (e) sind wahrscheinlich für das Klick spezifisch sein Schaltfläche (und der Name der Schaltfläche kann sich ändern). Der Code kann auch aufgerufen werden, ohne dass eine relevante Schaltfläche aktiv ist.
Eine dritte Alternative besteht darin, ein eigenes benutzerdefiniertes Klassen- und Ereignismodell zu erstellen, das einige Nachforschungen erfordern würde.
Hier ein Beispiel ist eine benutzerdefinierte Eigenschaft von der Userform mit:
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
Auch hier könnte das Objekt ein Objekt sein, eher als ein String, dann würde Property Set
anstatt Property Let
verwendet werden.
Hallo Andy G Ihre Antwort verkürzen meinen Code in Excel VBA sehr. Vielen Dank. – kan