miércoles, julio 15, 2015

Agregar pestañas personalizadas a la cinta de opciones (Excel 2007 - 2013)

Supongamos que hemos desarrollado un modelo en Excel (2007 en adelante) que contiene macros. Para facilitar el uso queremos agregar una pestaña (ficha) en la cinta de opciones para activar estas macros.

RibbonX


En este ejemplo, la ficha "Mis Macros" contiene tres iconos. Cada uno de ellos activa una macro ("Saludo" saluda al usuario con un "buen día" o "buenas tardes" de acuerdo a la hora del día; "Fecha" muestra la fecha corriente y "Hora" la hora).
Desde la versión 2007 de Excel en adelante no tenemos la posibilidad de programar la cinta de opciones con Vba, tal como podíamos hacer en las versiones anteriores donde podíamos crear barras de herramientas o agregar un nuevo elemento en la barra del menú de Excel programáticamente.

Si bien podemos agregar pestañas (fichas) en la cinta de opciones usando el menú Opciones-Personalizar Cinta de Opciones, agregar iconos a la ficha y ligar macros a los iconos, esta ficha es permanente, es decir, aparecerá en todo cuaderno de Excel que abramos. Lo mismo con los iconos que agreguemos en la barra de heramientas de accedso rápido (QAT).

Sin embargo podemos modificar la cinta de opciones dinámicamente, es decir, ligar la cinta modificada a un cuaderno determinado de manera que cuando cerramos el cuaderno las modificaciones desaparecen. Gracias a los excelente tutoriales de MVP Ron de Bruin la tarea es relativamente sencilla y no requiere dominio de detalles técnicos.

En este post mostraré los pasos para crear la pestaña para activar macros del ejemplo.

La forma más conveniente de editar la cinta de opciones es utilizando la herramienta Custom UI Editor que es gratuita y puede descargarse aquí.

Empezamos por crear el cuaderno que contiene las macros (el cuaderno con los códigos puede descargarse aquí). Una vez creado, guardamos y cerramos el cuaderno.

El próximo paso es activar el Custom UI Editor, abrir el archivo Excel que hemos creado (File - Open, en el editor) y elegir una de las dos opciones Office 2010 u Office 2007 en el menú Insert


Si el cuaderno será usado solamente con Excel 2010-2013 elegimos la opción Office 2010 Custom UI Part; para archivos que serán usados en Excel 2007-2013 usamos la opción Office 2007 Custom UI Part.
En nuestro ejemplo usaremos la segunda opción. En el editor pegamos este código

<customUI  xmlns="http://schemas.microsoft.com/office/2006/01/customui" >
  <ribbon >
    <tabs >
      <tab id="DbMacros" insertBeforeMso="TabInsert" label="Mis Macros">

        <group id="DbGroup01" imageMso="ReviewEditComment" label="Macros">
          <button id="DbG01B01" label="Saludo" imageMso="HappyFace" size="large"  onAction="Saludos" />
          <button id="DbG01B02" label="Fecha" imageMso="HeaderFooterCurrentDate" size="large"  onAction="la_fecha" />
          <button id="DbG01B03" label="Hora" imageMso="SlideShowRehearseTimings" size="large"  onAction="la_hora" />
        </group >


      </tab >
    </tabs >
  </ribbon >
</customUI >

Un archivo texto con el código puede descargarse aquí.

En la ventana del Custom UI Editor, este código se vera así





Analicemos las distintas partes del código XML que define la pestaña que agregamos:

<tab id="DbMacros" insertBeforeMso="TabInsert" label="Mis Macros">

En esta orden definimos un identificador, definimos dónde debe aparecer la pestaña en la cinta (a la izquierda de la pestaña Insertar) y la descripción (label).

<group id="DbGroup01" imageMso="ReviewEditComment" label="Macros">
          <button id="DbG01B01" label="Saludo" imageMso="HappyFace" size="large"  onAction="Saludos" />
          <button id="DbG01B02" label="Fecha" imageMso="HeaderFooterCurrentDate" size="large"  onAction="la_fecha" />
          <button id="DbG01B03" label="Hora" imageMso="SlideShowRehearseTimings" size="large"  onAction="la_hora" />
        </group >

Definimos el grupo y los botones que aparecerán dentro del grupo. Para cada botón definimos el identificador, la etiqueta, la imagen, el tamaño y con onAction la macro que será activada al pulsar el icono.

Las imágenes de los iconos están definidas por el valor de imageMso. Una lista de los iconos con sus nombre puede verse en esta página.

Después de introducir el código xml en el Custom UI Editor lo guardamos con el menú Save As

A partir de este momento cada vez que abramos el cuaderno la pestaña con el grupo de iconos "Mis Macros" aparecerá en la cinta de opciones.

El archivo con las macros puede descargarse aquí.

14 comentarios:

  1. Hola, es posible crear el archivo XML y asignárselo a un xlsm a partir de código VBA? Por ejemplo código contenido en un módulo, que cuando se ejecute modifique la cinta de opciones en un archivo dado.

    Gracias!!

    ResponderBorrar
  2. Hola,
    Muchas gracias,
    Pero no veo como adaptarlo a mi necesidad. El ejemplo es para Microsoft Project y yo necesito hacerlo en excel.
    Fundamentalmente el problema que encuentro es que el método SetCustomUI no existe en excel o al menos yo no lo encuentro.

    Un cordial saludo!

    ResponderBorrar
  3. Chik, así es. El SetCustomUI está disponible sólo para Project (pensé que lo estaba también para Excel, pero me equivoqué).
    Tal vez puedas usar la técnica de Hide/Unhide que propone Ron de Bruin en este post.

    ResponderBorrar
  4. Gracias,
    Al final lo he resuelto creando una barra de herramientas como en versiones anteriores a la 2007, a la que le he añadido los botones que necesito.
    Excel añade esos botones a la pestaña Add-Ins.
    Me hubiera quedado mejor si hubiera podido hacer mis propias Tab, personalizadas para cada usuario, pero así también me es util.

    No obstante muy buen post. Es muy didáctico y abre la puerta a la personalización absoluta de la Ribbon.

    Muy interesante!!
    Un cordial saludo!!

    ResponderBorrar
  5. Excelente!!!!!
    es algo que buscaba hace tiempo
    Una pregunta, asi como se puede insertar opciones en la pestana, de saludo, fecha, hora, puedo crear de ahi opciones que abran las hojas de Excel??, por ejemplo Hoja1, Hoja2, Hoja3, etc.? por favor, podrias publicar un ejemplo? o encirmelo a mi email? apperez2012@gmail.com
    Muchas gracias

    ResponderBorrar
  6. Como insertar tambien iconos personales en esa pestaba
    gracias
    Antonio (apperez2012@gmail.com

    ResponderBorrar
  7. como cambiar el nombre de la ficha "Mis Macros" por otro nombre
    apperez2012@gmail.com
    perdon son varias preguntas las que te estoy haciendo que puedes contestar, si me haces ese gran favor, todas en un solo correo
    Muchas gracias

    ResponderBorrar
  8. Hola, está todo explicado en la nota.

    ResponderBorrar
  9. falto mencionar que debe agregarse los argumentos: control As IRibbonControl entre los parentesis de la Macro:

    Sub saludos(control As IRibbonControl)
    ...
    End Sub

    ResponderBorrar
  10. Como hago para eliminar las demás opciones y dejar sólo Mimacros

    ResponderBorrar
  11. No se pueden eliminar. Se pueden ocultar usando quitando la marca del tab en la Opciones-Personalizar cinta de opciones.

    ResponderBorrar
  12. Una consulta: para definir más de un grupo de botones en la misma pestaña, ¿cómo debo modificar el código xml?

    ResponderBorrar
  13. Agregando otro bloque de código entre

    ResponderBorrar

Nota: sólo los miembros de este blog pueden publicar comentarios.