Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Una de las funciones mas socorridas entre los programadores de macros en Excel, es la
creación de menúes que alojen sus macros creadas para propósitos específicos, ya sea para
archivos de uso personal o para complementos (add-ins) que sean compartidos, vendidos o
distribuidos.
Excel 2003, nos permite la creación de menús que estén ligados a macros escritas por
nosotros mismos. Un código para la creación de un menú en esta versión es:
Sub CrearMenu()
Dim HelpMenu As CommandBarControl
Dim MenuNuevo As CommandBarPopup
Dim MenuItem As CommandBarControl
Dim SubmenuItem As CommandBarButton
'Borra el Menu 'EXCELeINFO' llamando a otra macro
Call BorrarMenu
'Busca por el menú Ayuda, esto es simplemente un convenio no firmado
entre programadores
'para los cuales cualquier menu creado y añadido debe ir antes que el
menu llamado Ayuda y/o Help, el cual tiene como ID =30010
Set HelpMenu = Application.CommandBars("Worksheet Menu
Bar").FindControl(ID:=30010)
If HelpMenu Is Nothing Then
' Añade el menu 'EXCELeINFO' al final
Set MenuNuevo = Application.CommandBars("Worksheet Menu
Bar").Controls.Add(Type:=msoControlPopup, Temporary:=True)
Else
' Si Ayuda existe, entonces antes que el menu '?' es decir
ID=30010
Set MenuNuevo = Application.CommandBars("Worksheet Menu
Bar").Controls.Add(Type:=msoControlPopup, Before:=HelpMenu.Index,
Temporary:=True)
End If
' hemos colocado un & antes que la 'C' para que la 'C' esté subrayada
y podamos acceder al menú no solamente con el ratón sino desde el teclado
con la combinacion de teclas 'ALT + C'
MenuNuevo.Caption = "EX&CELeINFO"
' Y vamos añadiéndole diferentes botones y/o controles tal que...
'------------------------------------
'MENÚ FORMATO DE REPORTES
Set MenuItem = MenuNuevo.Controls.Add(Type:=msoControlPopup)
With MenuItem
.Caption = "&Formato de reportes"
End With
'
Set SubmenuItem = MenuItem.Controls.Add(Type:=msoControlButton)
With SubmenuItem
.Caption = "&Reporte1"
.FaceId = 532
.OnAction = "Macro1"
End With
'3.B)
Set SubmenuItem = MenuItem.Controls.Add(Type:=msoControlButton)
With SubmenuItem
.Caption = "&Reporte2"
.FaceId = 532
.OnAction = "Macro2"
End With
'
Set SubmenuItem = MenuItem.Controls.Add(Type:=msoControlButton)
With SubmenuItem
.Caption = "&Formatear reporte"
.FaceId = 300
.OnAction = "Macro3"
End With
'------------------------------------
'BOTÓN ACERCA DE
Set MenuItem = MenuNuevo.Controls.Add(Type:=msoControlButton)
With MenuItem
.Caption = "&Macro1"
.FaceId = 682
.OnAction = "Macro4"
.BeginGroup = True
End With
'
Set MenuItem = MenuNuevo.Controls.Add(Type:=msoControlButton)
With MenuItem
.Caption = "&Acerca de ..."
.FaceId = 682
.OnAction = "Macro5"
.BeginGroup = True
End With
End Sub
En resumidas cuentas, los formatos de Office con terminaciones ‘x’ son en base a una petición
de organizaciones internacionales para Microsoft asignara formatos abiertos que les
permitieran a otras aplicaciones interoperar con ellos; el estándar de formatos se denomina
Office Open XML, también llamado OOXML y OpenXML. Un archivo Office Open XML contiene
principalmente datos basados en el lenguaje de marcado XML, comprimidos en un
contenedor .zip específico. Más información en Wikipedia: Office Open XML.
Retomando el tema de los menús, si abrimos el archivo de ejemplo anterior en 2007 o 2010, el
resultado mostrado no sería el óptimo, puesto que, estas versiones al no tener menús sino
pestañas, el encontrar el menú sería una tarea poco viable y estéticamente mala.
Por lo tanto, lo más conveniente será crear una nueva pestaña personalizada a nuestro gusto y
con los botones que nosotros decidamos, lo cual se vuelve mucho más estético y más
funcional.
Nota: en la versión 2007 no es posible personalizar pestañas desde el menú Personalizar cinta
de opciones…, pero en la versión 2010 ya es posible. El inconveniente que la cinta de opciones
quedaría para cualquier archivo y tendría que llamar a las macros residentes en diferentes
archivos, a menos que se guarden en el archivo PERSONAL, pero eso ya es otra historia.
Crear Ribbon en Excel 2007 y 2010
Anteriormente vimos que si un archivo, en su evento _Open manda crear un menú, este se
agregará en las barras de menú de Excel 2003 y anteriores, pero en Excel 2007 y 2010 se
crearán dentro de la pestaña de Complementos. Como también hemos visto anteriormente, los
archivos de Office Open XML realmente son contenedores .zip que albergan las características
de los archivos. Los menús de Excel se crean mediante código, pero los Ribbon vienen
almacenados en una achivo .xml que contiene el código necesario.
A continuación enlisto los pasos para crear personalizar nuestro propio Ribbon.
<customUI xmlns="http://schemas.microsoft.com/office/2009/07/customui">
<ribbon startFromScratch="false">
<tabs>
<tab id="customTab" label="Custom Tab">
<group id="customGroup" label="Custom
Group">
<button id="customButton"
label="Custom Button" imageMso="HappyFace" size="large"
onAction="Callback" />
</group>
</tab>
</tabs>
</ribbon>
</customUI>
:: Descargar el ejemplo