Übergeben Sie Argumente an Makros von Schaltflächen und Menüs mit VBA in Microsoft Excel

Anonim

Das folgende Beispiel zeigt, wie Sie CommandBar-Schaltflächen/-Menüs erstellen können, die ein oder mehrere Argumente an ein Makro übergeben.
Das Beispiel zeigt auch, wie Sie dem Kontextmenü der Zelle ein neues Element hinzufügen können.

Sub AddCommandToCellShortcutMenu() Dim i As Integer, ctrl As CommandBarButton DeleteAllCustomControls ' die Steuerelemente löschen, falls sie bereits vorhanden sind ' die neuen Steuerelemente erstellen Mit Application.CommandBars(25) ' das Zellen-Kontextmenü ' eine gewöhnliche Befehlsleistenschaltfläche hinzufügen Set ctrl = .Controls.Add (msoControlButton, , , , True) With ctrl .BeginGroup = True .Caption = "New Menu1" .FaceId = 71 .State = msoButtonUp .Style = msoButtonIconAndCaption .Tag = "TESTTAG1" .OnAction = "MyMacroName2" End With ' add a Schaltfläche, die ein Zeichenfolgenargument übergibt Set ctrl = .Controls.Add(msoControlButton, , , , True) With ctrl .BeginGroup = False .Caption = "New Menu2" .FaceId = 72 .Style = msoButtonIconAndCaption .Tag = "TESTTAG2" .OnAction = "'MyMacroName2 ""New Menu2""'" End With ' eine Schaltfläche hinzufügen, die ein String-Argument übergibt Set ctrl = .Controls.Add(msoControlButton, , , , True) With ctrl .BeginGroup = False .Caption = "New Menu3" .FaceId = 73 .Style = msoButtonIconAndCaption .Tag = "TESTTAG3" .OnAction = "'MyMacroName2 """ & .Caption & """'" End With ' fügt eine Schaltfläche hinzu, die zwei Argumente, einen String und eine ganze Zahl, übergibt Set ctrl = .Controls.Add(msoControlButton, , , , True) With ctrl . BeginGroup = False .Caption = "New Menu4" .FaceId = 74 .Style = msoButtonIconAndCaption .Tag = "TESTTAG4" .OnAction = "'MyMacroName3 """ & .Caption & """, 10'" End With End With Set ctrl = Nichts End Sub Sub DeleteAllCustomControls() ' die Steuerelemente löschen, wenn sie bereits vorhanden sind Dim i As Integer For i = 1 To 4 DeleteCustomCommandBarControl "TESTTAG" & i Next i End Sub Private Sub DeleteCustomCommandBarControl(CustomControlTag As String) ' löscht ALLE CommandBar-Steuerelemente mit Tag = CustomControlTag Bei Fehler Fortsetzen Weiter Application.CommandBars.FindControl(, , CustomControlTag, False).Schleife löschen bis Application.CommandBars.FindControl(, , _ CustomControlTag, False) Nichts bei Fehler GoTo 0 End Sub ' Beispielmakros verwendet von die Schaltflächen der Befehlsleiste Sub MyMacroName1() MsgBox "Die Zeit ist " & Format(Time, "h h:mm:ss") End Sub Sub MyMacroName2(Optional MsgBoxCaption As String = "UNKNOWN") MsgBox "Die Zeit ist " & Format(Time, "hh:mm:ss"), , _ "Dieses Makro wurde gestartet von " & MsgBoxCaption End Sub Sub MyMacroName3(MsgBoxCaption As String, DisplayValue As Integer) MsgBox "Die Zeit ist " & Format(Time, "hh:mm:ss"), , _ MsgBoxCaption & " " & DisplayValue End Sub