Geef argumenten door aan macro's vanuit knoppen en menu's met VBA in Microsoft Excel

Anonim

Het onderstaande voorbeeld laat zien hoe u CommandBar-knoppen/menu's kunt maken die een of meer argumenten aan een macro doorgeven.
het voorbeeld laat ook zien hoe u een nieuw item aan het snelmenu Cel kunt toevoegen.

Sub AddCommandToCellShortcutMenu() Dim i As Integer, ctrl As CommandBarButton DeleteAllCustomControls ' verwijder de besturingselementen als ze al bestaan ​​' maak de nieuwe besturingselementen Met Application.CommandBars(25) ' het snelmenu voor cellen ' voeg een gewone commandobalkknop toe Set ctrl = .Controls.Add (msoControlButton, , , , True) Met ctrl .BeginGroup = True .Caption = "New Menu1" .FaceId = 71 .State = msoButtonUp .Style = msoButtonIconAndCaption .Tag = "TESTTAG1" .OnAction = "MyMacroName2" knop die één stringargument doorgeeft 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 ' voeg een knop toe die één string-argument doorgeeft Set ctrl = .Controls.Add(msoControlButton, , , , True) With ctrl .BeginGroup = False .Caption = "Nieuw Menu3" .FaceId = 73 .Style = msoButtonIconAndCaption .Tag = "TESTTAG3" .OnAction = "'MyMacroName2 """ & .Caption & """'" End With ' voeg een knop toe die twee argumenten doorgeeft, een string en een geheel getal Set ctrl = .Controls.Add(msoControlButton, , , , True) Met ctrl . BeginGroup = False .Caption = "New Menu4" .FaceId = 74 .Style = msoButtonIconAndCaption .Tag = "TESTTAG4" .OnAction = "'MyMacroName3 """ & .Caption & """, 10'" Eindigen met End With Set ctrl = Nothing End Sub Sub DeleteAllCustomControls() ' verwijder de besturingselementen als ze al bestaan ​​Dim i As Integer For i = 1 To 4 DeleteCustomCommandBarControl "TESTTAG" & i Next i End Sub Private Sub DeleteCustomCommandBarControl(CustomControlTag As String) ' verwijdert ALLE CommandBar-besturingselementen met Tag = CustomControlTag On Error Resume Next Do Application.CommandBars.FindControl(, , CustomControlTag, False).Delete Loop Until Application.CommandBars.FindControl(, , _ CustomControlTag, False) Is Nothing On Error GoTo 0 End Sub ' voorbeeldmacro's die worden gebruikt door de commandobalkknoppen Sub MyMacroName1() MsgBox "The time is " & Format(Time, "h h:mm:ss") End Sub Sub MyMacroName2(Optional MsgBoxCaption As String = "UNBNOWN") MsgBox "The time is " & Format(Time, "uu:mm:ss"), , _ "Deze macro is gestart vanaf " & MsgBoxCaption End Sub Sub MyMacroName3(MsgBoxCaption As String, DisplayValue As Integer) MsgBox "The time is " & Format(Time, "uu:mm:ss"), , _ MsgBoxCaption & " " & DisplayValue End Sub