Home > Excel, Trucos, vba > Crear menús en Excel 2003 y Ribbon en Excel 2007 y 2010

Crear menús en Excel 2003 y Ribbon en Excel 2007 y 2010

Twittear este post Compartir en Facebook

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.

Menús en EXCEL 2003

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

El menú creado se vería de la siguiente manera:

image

Notas: El menú creado en el ejemplo es aplicable sólo para el archivo en cuestión, por lo que se crea una macro con el nombre de BorrarMenu en el evento _BeforeClose.

:: Descargar el ejemplo

Menús y Ribbon en EXCEL 2007,2010

A partir de Excel 2007, Microsoft introdujo una nueva nomenclatura para los formatos de Office, añadiéndoles una X al final de las extensiones conocidas, tal es el caso de los formatos *.xls, ahora son *.xlsx; y el formato *.xlsm para los archivos de Excel que contienen macros, distinguiendo así los formatos potencialmente peligrosos.

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.

Imagen de ejemplo en Excel 2010

image

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.

  • Es recomendable descargar la aplicación Custom UI Editor for Microsoft Office.
  • El archivo creado en Excel debe tener la extensión .xlsm (libro de Excel habilitado para macros).
  • Abrimos la aplicación y desde ahí abrimos nuestro archivo de Excel.

image

  • Insertamos un archivo pesonalizado para Excel 2007 o Excel 2010 y lo renombramos como customIU.xml.

image

  • Al tener nuestro achivo, insertamos un ejemplo de XML, ya sea una pestaba (tab), un espacio dentro menú Archivo (backstage), etc. En este ejemplo vamos a insertar una pestaña personalizada.

image

  • Se guarda el archivo y se abre directamente en Excel para ver el ejemplo.

Código de ejemplo:

pre{font-family:courier new; font-size:10.0pt;}

<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>

Imagen de cómo se verá nuestro Ribbon:

image

  • Las macros se mandan llamar desde onAction en el archivo customUI.xml, y en nuestro código de vba las macros deben tener el siguiente parámetro:
Sub Callback(control As IRibbonControl)
MsgBox "Aquí debería ocurrir una acción", vbInformation
End Sub

:: Descargar el ejemplo

  1. November 30, 2011 at 22:20

    Interesante lo que compartes, por alguna razon el link para desgargar ” Custom UI Editor for Microsoft Office” ya no funciona pero dejo este otro que esta en la misma pagina,
    http://openxmldeveloper.org/cfs-file.ashx/__key/communityserver-components-postattachments/00-00-00-72-93/OfficeCustomUIEditorSetup.zip

    Te felicito tienes un excelente blog.

    Saludos cordiales

    • sergioacamposh
      December 1, 2011 at 09:51

      Muchas gracias por los comentarios y por el dato del nuevo link.

      Saludos !!

      • sergioacamposh
        December 1, 2011 at 09:55

        Aprovecho para actualizar el link de descarga de la aplicación Custom UI Editor for Microsoft Office.

        De nuevo, gracias por el dato y los comentarios.

  2. Elvis Anavi
    April 13, 2012 at 09:50

    hice todos los pasos mencionados, pero al abrir el archivo de excel habilitado para macros en el excel no aparece el ribbon, a que se puede deber?

    • sergioacamposh
      April 13, 2012 at 17:00

      Usas Excel 2007 o 2010 ??

      Si gustas puedes subir tu archivo y lo revisamos.

  3. julio
    April 21, 2012 at 13:50

    Congratulaciones por tan excelente blog.
    te cuento que no consigo asignarle una macro al custom tab

    • sergioacamposh
      April 21, 2012 at 16:27

      Ya lograste mostrar la barra deo ribbon en Excel?

  4. julio
    April 23, 2012 at 08:24

    Listo mi estimado sergio ! Lo que pasa es que no habia puesto el codigo de la macro en un modulo sino en una hoja. Ahora abusando de tu valioso tiempo y este maravilloso espacio quiero consultartle nuevamente algo.¿ Como le cambio el icono de carita feliz al custom tab por otro personal? y como le agrego otro custom group u otro boton a la misma pestaña pestaña ? Mil gracias por compartir tu tiempo

    • sergioacamposh
      April 23, 2012 at 20:48

      Para crear grupos debes abrir una etiqueta como en el ejemplo y añadirle los botones.

      Y para añadir más íconos, visita la siguiente página que te será de mucha utilidad http://www.rondebruin.nl/ribbon.htm

  5. julio
    May 2, 2012 at 01:28

    Mil y mil gracias por la excelente informacion e interes. Que cada dia se te multiplique la sabiduria !

    • sergioacamposh
      May 2, 2012 at 20:03

      Es un gusto que te haya servido.

  6. Lucas Rios
    May 10, 2012 at 13:49

    Buenos dias. No logro ponerle mas botones al grupo. Me darian una mano?

  7. Lucas Rios
    May 11, 2012 at 06:51

    Si si sigo con uno solo. Estoy bojando los archivos del linck para ver si puedo sacarlos de ahi pero el winrar no me lo descromprime porque estan dañados.

  8. Lucas Rios
    May 11, 2012 at 12:10

    Ya esta. Lo pude hacer. Muchas gracias. Excelente el blog.

  9. PACO-PIPORRO
    May 11, 2012 at 16:51

    Buenas tardes
    Sé que no es el tema, pero en que parte de este lugar puedo hacer una consulta?
    Es sobre como obtener un dato o valor de un conjunto de datos Filtrados y solo de las celdas visibles.

    Gracias.

    • May 11, 2012 at 20:35

      Aquí en este medio. Y te recomiendo que añadas un link a un archivo por si fuera necesario descargar un ejemplo.

      • Lucas Rios
        May 14, 2012 at 08:38

        Buenos dias. Pude crear el menu que queria (me faltan las imagenes). El tema es que quisiera que funcione en Excel 2010 y en Excel 2007. Probe con poner los dos Custom Parte 2007/2010 pero no funciono.
        Sergio, ¿Tengo manera de enviarte el archivo para que lo veas?
        Atte.

      • May 14, 2012 at 11:19

        Los ribbon son compatibles con 2007 y 2010. Si gustas sube tu archivo a un servidor gratuito y con gusto le damos una revisada.

  10. Lucas Rios
    May 14, 2012 at 13:25

    Ahi va: https://www.dropbox.com/s/b35dggkxt740g48/BioCont%20%28Hogar%29%20Version%20Prueba.xlsm

    Como podran ver, en 2010 me funciona a la perfeccion un ribbon que me traslada de una hoja a otra. Como no pude hacerlo que funcione en un 2007, deje el antiguo formulario creado desde VBA.

    • May 15, 2012 at 10:57

      Debería funcionarte para 2007, puedes adjuntar algunas pantallas de por qué no te deja ejecutarlo en 2007.

      • Lucas Rios
        May 15, 2012 at 12:22

        Es que no tengo pantalla alguna. En 2007 directamente me abre el archivo pero no pone el ribbon.

      • May 15, 2012 at 19:21

        Si estás utilizando la aplicación que recomiendo, hay que eliminar el archivo customUI14.xml y darle en Validate para que te confirme si le hace falta algo al código.

  11. Fernando Marínez
    June 28, 2012 at 12:29

    Hola, tratéde bajar el ejemplo para office 2007 pero el link ya no funciona, lo podrías corregir por favor ?

    • June 28, 2012 at 19:36

      Listo, ya lo puedes descargar.

      • Alejandro RO
        September 19, 2012 at 15:19

        sergioacamposh :
        Muchas gracias por los comentarios y por el dato del nuevo link.
        Saludos !!

        Que tal vi tu ejemplo y me parecio genial…bueno yo tengo una duda, yo tengo un control ocx que hice en vb 6.0 y quiero cargarlo en una barra solo que en la declaración del type que debo colocar, es en la siguiente linea
        MenuItem.Controls.Add(Type:=msoControlButton)

  12. Fernando Marínez
    July 2, 2012 at 11:47

    Muchas gracias, ya pude bajarlo

  13. alejandro
    October 9, 2013 at 00:56

    crees que se pueda crear un ribbon y dentro de el salga un archivo de excel? por ejemplo que habra ese menu y contenga un archivo ya por defecto que salga como plantilla?

    • October 14, 2013 at 14:32

      Todos los complementos de Excel en realidad son archivos con extensión .xla o .xlam.

      Puedes tener tu archivo de Excel con x cantidad de hojas y con el formato que tú quieras y al momento de guardarlo como como complemento, esas hojas quedan ocultas, pero siguen ahí para que las puedas seguir usando.

      El código que podría ejecutar el botón del Ribbon sería algo así.

      Hoja1.Copy

  1. December 29, 2011 at 22:04
  2. February 5, 2012 at 12:29
  3. July 4, 2012 at 16:27

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  Change )

Google+ photo

You are commenting using your Google+ account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s