El siguiente ejemplo muestra cómo puede crear botones / menús de CommandBar que pasan uno o más argumentos a una macro.
el ejemplo también muestra cómo puede agregar un nuevo elemento al menú de acceso directo de Celda.
Sub AddCommandToCellShortcutMenu () Dim i As Integer, ctrl As CommandBarButton DeleteAllCustomControls 'elimine los controles si ya existen' cree los nuevos controles Con Application.CommandBars (25) 'el menú de acceso directo de celda' agregue un commandbarbutton ordinario Establecer ctrl = .Controls.Add (msoControlButton``,, True) Con ctrl .BeginGroup = True .Caption = "New Menu1" .FaceId = 71 .State = msoButtonUp .Style = msoButtonIconAndCaption .Tag = "TESTTAG1" .OnAction = "MyMacro addName a2" Termina con botón que pasa un argumento de cadena Establecer ctrl = .Controls.Add (msoControlButton``,, True) Con ctrl .BeginGroup = False .Caption = "New Menu2" .FaceId = 72 .Style = msoButtonIconAndCaption .Tag = "TESTTAG2" .OnAction = "'MyMacroName2" "New Menu2" "'" End With 'agregar un botón que pase un argumento de cadena Establecer ctrl = .Controls.Add (msoControlButton``,,, True) Con ctrl .BeginGroup = False .Caption = "New Menu3 ".FaceId = 73 .Style = msoButtonIconAndCaption .Tag =" TESTTAG3 ".OnAction = "'MyMacroName2" "" & .Caption & "" "'" Finalizar con 'agregar un botón que pase dos argumentos, una cadena y un entero Establecer ctrl = .Controls.Add (msoControlButton,,,, True) Con ctrl. BeginGroup = False .Caption = "New Menu4" .FaceId = 74 .Style = msoButtonIconAndCaption .Tag = "TESTTAG4" .OnAction = "'MyMacroName3" "" & .Caption & "" ", 10'" Finalizar con Finalizar con conjunto ctrl = Nothing End Sub Sub DeleteAllCustomControls () 'elimina los controles si ya existen Dim i As Integer For i = 1 to 4 DeleteCustomCommandBarControl "TESTTAG" & i Next i End Sub Private Sub DeleteCustomCommandBarControl (CustomControlTag As String)' elimina TODOS los controles CommandBar con Tag = CustomControlTag en caso de error Reanudar el siguiente paso Application.CommandBars.FindControl (,, CustomControlTag, False) .Delete Loop until Application.CommandBars.FindControl (,, _ CustomControlTag, False) No hay nada en el error GoTo 0 End Sub 'macros de ejemplo utilizadas por los botones de la barra de comandos Sub MyMacroName1 () MsgBox "La hora es" & Format (Time, "h h: mm: ss ") End Sub Sub MyMacroName2 (Opcional MsgBoxCaption As String =" UNKNOWN ") MsgBox" La hora es "& Format (Hora," hh: mm: ss "),, _" Esta macro se inició desde " & MsgBoxCaption End Sub MyMacroName3 (MsgBoxCaption como cadena, DisplayValue como entero) MsgBox "La hora es" & Format (Hora, "hh: mm: ss"), _ MsgBoxCaption & "" & DisplayValue End Sub