Lanzar menú contextual al presionar un botón en Excel vba
Siguiendo con el tema de los menús en Excel, en esta ocasión comparto un archivo donde tenemos un formulario el cual contiene un botón, que al presionar, nos muestra un menú contextual en el cual podremos llamar funciones o procedimientos almacenados.
Para construir el menú contextual, nos basaremos en el post Crear menús en Excel 2003 y Ribbon en Excel 2007 y 2010.
Ver Video Lanzar menú al presionar un botón
Suscríbete al canal de EXCELeINFO en YouTube para aprender más de Excel y macros.
Descripción del formulario
Nuestro formulario tiene 3 botones: Crear menú, Lanzar menú y Borrar menú. Estos botones llaman a 3 procedimiento que igual pueden ejecutarle al iniciar el archivo y salir, es decir. al iniciar el archivo podemos llamar a que se construya el menú y al salir a que se destruya.
Al presionar Lanzar formulario ejecuta el prodecimiento que realiza un método ShowPopup para mostrar el menú creado, si es que existe.
Formulario en acción
El siguiénte código vba contruye una barra de comando tipo popup. El método OnAction manda llamar un procedimiento y el método Faceid contiene una icono el cual podremos consultar en la siguientes liga:
https://www.tek-tips.com/faqs.cfm?&rat1=10&fid=6091
https://docs.microsoft.com/es-mx/office/vba/api/office.commandbars.add
Código vba
Private Sub CommandButton1_Click() On Error GoTo ErrorHandler Application.CommandBars("MenuPrueba").ShowPopup Exit Sub ErrorHandler: If Err.Number = 5 Then MsgBox "El menú no está contruido. Presione Crear menú", vbExclamation, "EXCELeINFO" Else MsgBox "Ha ocurrido un error: " & Err.Description, vbExclamation, "EXCELeINFO" End If End Sub ' Sub CrearMenu() Set myBar = CommandBars.Add _ (Name:="MenuPrueba", Position:=msoBarPopup, _ Temporary:=True) 'Agregar un nuevo item Set myItem = myBar.Controls.Add(Type:=msoControlButton) With myItem .Caption = "Item de menú 1" .OnAction = "Test" .FaceId = 80 End With 'Agregar un nuevo item Set myItem = myBar.Controls.Add(Type:=msoControlButton) With myItem .Caption = "Item de menú 2" .OnAction = "Test" .FaceId = 81 End With 'Agregar un nuevo item Set myItem = myBar.Controls.Add(Type:=msoControlButton) With myItem .Caption = "Item de menú 3" .OnAction = "Test" .FaceId = 82 End With 'Agregar un nuevo item Set myItem = myBar.Controls.Add(Type:=msoControlButton) With myItem .Caption = "Item de menú 4" .OnAction = "Test" .FaceId = 83 End With End Sub ' Sub BorrarMenu() On Error Resume Next Application.CommandBars("MenuPrueba").Delete On Error GoTo 0 End Sub ' Sub Test() MsgBox "Se ejecuta una macro o se llama a una función desde el menú", vbInformation, "EXCELeINFO" End Sub
:: Descargar el ejemplo EXCELeINFO – lanzar menú contextual al presionar botón