Passe argumentos para macros de botões e menus usando VBA no Microsoft Excel

Anonim

O exemplo abaixo mostra como você pode criar botões / menus CommandBar que passam um ou mais argumentos para uma macro.
o exemplo também mostra como você pode adicionar um novo item ao menu de atalho da célula.

Sub AddCommandToCellShortcutMenu () Dim i As Integer, ctrl As CommandBarButton DeleteAllCustomControls 'exclua os controles se eles já existirem' crie os novos controles Com Application.CommandBars (25) 'o menu de atalho da célula' adicione um commandbarbutton comum Set ctrl = .Controls.Add (msoControlButton,,,, True) Com ctrl .BeginGroup = True .Caption = "Novo Menu1" .FaceId = 71 .State = msoButtonUp .Style = msoButtonIconAndCaption .Tag = "TESTTAG1" .OnAction = "MyMacroName2" Com 'add a botão que passa um argumento de string Set ctrl = .Controls.Add (msoControlButton,,,, True) Com ctrl .BeginGroup = False .Caption = "Novo Menu2" .FaceId = 72 .Style = msoButtonIconAndCaption .Tag = "TESTTAG2" .OnAction = "'MyMacroName2" "Novo Menu2" "'" End With 'adiciona um botão que passa um argumento de string Set ctrl = .Controls.Add (msoControlButton,,,, True) With ctrl .BeginGroup = False .Caption = "Novo Menu3 ".FaceId = 73 .Style = msoButtonIconAndCaption .Tag =" TESTTAG3 ".OnAction = "'MyMacroName2" "" & .Caption & "" "'" End With 'adiciona um botão que passa dois argumentos, uma string e um inteiro Set ctrl = .Controls.Add (msoControlButton,,,, True) Com ctrl. BeginGroup = False .Caption = "Novo Menu4" .FaceId = 74 .Style = msoButtonIconAndCaption .Tag = "TESTTAG4" .OnAction = "'MyMacroName3" "" & .Caption & "" ", 10'" Fim com End With Set ctrl = Nothing End Sub Sub DeleteAllCustomControls () 'excluir os controles se já existirem Dim i As Integer For i = 1 a 4 DeleteCustomCommandBarControl "TESTTAG" & i Next i End Sub Private Sub DeleteCustomCommandBarControl (CustomControlTag As String)' exclui TODOS os controles CommandBar com Tag = CustomControlTag On Error Resume Next Execute Application.CommandBars.FindControl (,, CustomControlTag, False) .Delete Loop Até Application.CommandBars.FindControl (,, _ CustomControlTag, False) Is Nothing On Error GoTo 0 End Sub 'macros de exemplo usadas por os botões da barra de comando Sub MyMacroName1 () MsgBox "A hora é" & Format (Time, "h h: mm: ss ") End Sub Sub MyMacroName2 (Opcional MsgBoxCaption As String =" UNKNOWN ") MsgBox" A hora é "& Format (Time," hh: mm: ss "),, _" Esta macro foi iniciada a partir de " & MsgBoxCaption End Sub MyMacroName3 (MsgBoxCaption As String, DisplayValue As Integer) MsgBox "A hora é" & Format (Time, "hh: mm: ss"),, _ MsgBoxCaption & "" & DisplayValue End Sub