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.

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

Lanzar menú desde botó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 siguiente liga http://www.outlookexchange.com/articles/toddwalker/BuiltInOLKIcons.asp.

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

You may also like...