miércoles, 3 de diciembre de 2014

VBA: Personalizar el menú contextual de la hoja de Excel.

Veremos cómo de sencillo es personalizar nuestra Menú contextual sobre la hoja de cálculo con un sencillo procedimiento.

VBA: Personalizar el menú contextual de la hoja de Excel.



El sentido o utilidad de esto podría ser facilitar la ejecución de nuestras macros más recurrentes...

Supongamos tenemos en nuestro libro de trabajo dos macros llamadas: 'NuestraMacro01' y 'NuestraMacro02' (da igual qué hagan...).
Son macros importantes para nosotros y las empleamos con asiduidad.. por lo que necesitamos tenerlas a la vista fácilmente.
Así por tanto insertaremos en un módulo general el siguiente procedimiento (y ejecutaremos):

Sub AñadirMenuClicDerechoHoja()
Dim MenuContextual As CommandBar, MySubMenu As CommandBarControl
 
On Error Resume Next
'comenzamos borrando el grupo que tuviéramos...
With Application.CommandBars("Cell")
    Call .Controls("Nuestro Grupo &Excelforo").Delete
End With
On Error GoTo 0

Set MenuContextual = Application.CommandBars("Cell")
'Situamos nuestro grupo en la parte inferior (no usamos el posicionador before:=x)
Set MySubMenu = MenuContextual.Controls.Add(Type:=msoControlPopup)

With MySubMenu
    'Le damos nombre al grupo
    .Caption = "Nuestro Grupo &Excelforo"
    'añadimos un separador al grupo
    .BeginGroup = True
    'Nombre de la etiqueta para referirnos a ella con código si fuera necesario
    .Tag = "ExcelforoGroup"

    'Elemento 1
    'Añadimos  un botón
    With .Controls.Add(Type:=msoControlButton)
        'que ejecuta la macro que le indiquemos (debe existir!!)
        .OnAction = "'" & ThisWorkbook.Name & "'!" & "NuestraMacro01"
        'añadimos el icono número 59 (un 'smile')
        .FaceId = 59
        'mostramos el texto
        .Caption = "Eje&cuta la macro 01"
    End With

    'Elemento 2
    'Añadimos  un botón
    With .Controls.Add(Type:=msoControlButton)
    'que ejecuta la macro que le indiquemos (debe existir!!)
        .OnAction = "'" & ThisWorkbook.Name & "'!" & "NuestraMacro02"
        'añadimos el icono número 64 (un 'teclado')
        .FaceId = 64
        'mostramos el texto
        .Caption = "E&jecuta la macro 02"
        End With

'etcétera, etcétera...

End With

'emplearíamos esto para resetear el Menú contextual!!!
'Application.CommandBars("Cell").Reset
End Sub



El resultado es el de la imagen del inicio.. tenemos a nuestra disposición haciendo un sencillo clic derecho con el ratón nuestras dos macros.

Notemos que en las propiedades .Caption he incorporado el símbolo & delante de la letra que deseo 'acelerar' (o que sirva de acceso rápido presionándola).

No hay comentarios:

Publicar un comentario en la entrada