Personalizar menú de click derecho sobre las celdas en Excel con XML y vba
Para este artículo les tengo dos maneras de crear un menú contextual al momento de dar click derecho sobre celdas en Excel. El primer método es en base a código XML incluído en versiones de Excel 2007, 2010 y 2013, el cual explico aquí: Crear menús en Excel 2003 y Ribbon en Excel 2007 y 2010.
Para crear el menú contextual (con vba) al dar click derecho sobre una celda, hay que revisar este artículo: Add-in para manipulación de texto en Excel.
Por qué usar XML para crear menú contextual
Como lo vimos en el link anterior, con XML podemos crear menús para el Ribbon de Excel, así como menús contextuales para click derecho.
Ventajas de usar XML
-
Podemos modificar los archivos sin necesidad de abrir Excel (esto no se puede si el archivo está guardado como add-in).
-
Podemos crear menús y Ribbon sin necesidad de vba. El código vba será para las macros que los menús manden llamar.
Cómo lo hacemos
Primero descargaremos el Custom UI Editor For Microsoft Office y lo instalamos en nuestra PC.
Referencia: Insertar botón personalizado en el Ribbon de Excel al abrir un archivo o add-in
Una vez instalado el programa lo abrimos en File > Open.
En la parte izquierda aparecerá el nombre del archivo. Elegimos el menú Insert e insertaremos Office 2010 Custom UI Part y Office 2007 Custom UI Part.
Figura 1. Custom UI Editor para Office
Para 2010 ingresamos el siguiente código:
<customUI xmlns="http://schemas.microsoft.com/office/2009/07/customui"> <contextMenus> <contextMenu idMso="ContextMenuCell"> <menu id="MySubMenu" label="EXCELeINFO con XML" insertBeforeMso="Cut" > <button id="btn1" label="Prueba 1" imageMso="E" onAction="Macro1"/> <button id="btn2" label="Prueba 2" imageMso="X" onAction="Macro2"/> <button id="btn3" label="Prueba 3" imageMso="C" onAction="Macro3"/> <button id="btn4" label="Prueba 4" imageMso="E" onAction="Macro4"/> <button id="btn5" label="Prueba 5" imageMso="L" onAction="Macro5"/> <menuSeparator id="MySeparator2" insertBeforeMso="Cut" /> <button id="btn6" label="Prueba 6" imageMso="ConstrainNumeric" onAction="Macro6"/> </menu> <menuSeparator id="MySeparator" insertBeforeMso="Cut" /> </contextMenu> </contextMenus> </customUI>
Para 2007 ingresamos el siguiente código:
<customUI xmlns="http://schemas.microsoft.com/office/2006/01/customui"> <contextMenus> <contextMenu idMso="ContextMenuCell"> <menu id="MySubMenu" label="EXCELeINFO con XML" insertBeforeMso="Cut" > <button id="btn1" label="Prueba 1" imageMso="E" onAction="Macro1"/> <button id="btn2" label="Prueba 2" imageMso="X" onAction="Macro2"/> <button id="btn3" label="Prueba 3" imageMso="C" onAction="Macro3"/> <button id="btn4" label="Prueba 4" imageMso="E" onAction="Macro4"/> <button id="btn5" label="Prueba 5" imageMso="L" onAction="Macro5"/> <menuSeparator id="MySeparator2" insertBeforeMso="Cut" /> <button id="btn6" label="Prueba 6" imageMso="ConstrainNumeric" onAction="Macro6"/> </menu> <menuSeparator id="MySeparator" insertBeforeMso="Cut" /> </contextMenu> </contextMenus> </customUI>
Nota: cuando abramos el archivo en Excel hay que procurar cerrarlo en el Custom UI Editor y viceversa.
Al abrir el archivo en Excel, notaremos que se creó el menú contextual al dar click derecho sobre las celdas.
Figura 2. Menú contextual creado con XML.
Código vba
El siguiente código de ejemplo son las macros que las opciones del menú mandan llamar.
Public Const Titulo = "EXCELeINFO" Sub Macro1(control As IRibbonControl) MsgBox "Macro 1", vbInformation, "Titulo" End Sub Sub Macro2(control As IRibbonControl) MsgBox "Macro 2", vbInformation, "Titulo" End Sub Sub Macro3(control As IRibbonControl) MsgBox "Macro 3", vbInformation, "Titulo" End Sub Sub Macro4(control As IRibbonControl) MsgBox "Macro 4", vbInformation, "Titulo" End Sub Sub Macro5(control As IRibbonControl) MsgBox "Macro 5", vbInformation, "Titulo" End Sub Sub Macro6(control As IRibbonControl) MsgBox "Macro 6", vbInformation, "Titulo" End Sub
Anexos
Descarga el ejemplo Menú click derecho con vba y XML.rar