Menús personalizados en Access (Ribbon Menu)

Ribbon menu, cinta de opciones, menú de cinta ó Ribbon Office Fluent
Se aplica a Access 2007, Access 2010, Access 2013 y Access 2016.
Para el ejemplo se ha utilizado Access 2010.


En este artículo se explica cómo personalizar o reemplazar el menú predeterminado de Access por uno personalizado.

A continuación se mencionan algunos conceptos básicos, y seguidamente cómo hacerlo paso a paso con un ejemplo práctico.

Ribbon Menu

O simplemente Ribbon, es un menú en forma de cinta de opciones, con una interfaz gráfica, y que reemplaza al menú tradicional de textos, desplegables y con estructura jerárquica tipo árbol. Microsoft empleó este tipo de menú por primera vez en Office 2007. El aspecto de este tipo de menú es el siguiente:


Objetivo

El propósito será explicar paso a paso cómo ocultar todas esas opciones predeterminadas, para mostrar finalmente un menú personalizado, tal como se muestra en la imagen siguiente:


Es importante saber que no es posible ocultar la ficha Archivo del menú de Access. Sin embargo es posible ocultar la mayor parte de las opciones de la misma.

En versiones anteriores a Office 2007 era posible modificar el menú y reemplazarlo completamente, de una forma mucho más sencilla, y sobre todo, obteniendo como resultado el aspecto de una aplicación a medida.

Con la versión de Office 2007 y posteriores es posible modificar el menú creando una tabla en XML, con un nombre y campos determinados, que Office reconoce al iniciarse y que utilizará como definición del menú. El más mínimo error gramatical en el XML será suficiente para que Access omita esta definición y muestre el menú predeterminado, sin dar siquiera un mensaje de error.

XML

Para mostrar un menú personalizado en Access es necesario utilizar el lenguaje de marcado XML, mediante el cual se definen las opciones que aparecen en la cinta y sus acciones.

Con el XML es posible ocultar las fichas predeterminadas del menú de Access (todas o algunas), y/o añadir fichas propias. Y dentro de estas fichas pueden colocarse botones que llaman a macros propias, o incluir comandos preestablecidos de Access.

Dichas líneas de XML se pueden:
  • almacenar en una tabla en la propia base de datos a la que va a afectar
  • insertar en un procedimiento de VBA
  • almacenar en otra tabla de una base de datos distinta
  • ó vincular desde una hoja de cálculo de Excel.
En el desarrollo de esta explicación se guardará el XML en una tabla de la misma base de datos.

En el ejemplo que sigue, se creará una base de datos desde el principio, con un par de formularios, una tabla que contiene el XML con la definición del menú personalizado, y mediante dicho menú se abrirán los formularios mencionados.

Paso 1: creación de la base de datos

Abrir Access y crear una nueva base de datos en blanco.

(Menú Archivo, opción Nuevo y seleccionar Base de datos en Blanco ó Base de datos del escritorio en Blanco según la versión de Office)


Para ver el panel de navegación y todos los objetos de la base de datos, ir al menú Archivo, Opciones y seleccionar Base de datos actual.

En la sección Navegación marcar Mostrar panel del navegación:


Clicar Opciones de navegación y marcar todas las opciones de presentación:


De esta forma veremos todos los elementos que iremos creando en la base de datos.

Esto es necesario porque más adelante se añadirá una tabla que por su nombre pasará a ser un objeto del sistema, y como tal no es visible al usuario con la configuración de opciones estándar. Dicha tabla contendrá la definición del nuevo menú.

Al aceptar Access mostrará un mensaje diciendo que para aplicar los cambios es necesario cerrar y volver a abrir la base de datos.

Paso 2: creación de un par de formularios

Se crearán dos formularios, simplemente con el fin de ver y probar el funcionamiento del menú.

(Ficha Crear, opción Formulario en blanco.)


A dichos formularios los llamaremos FormularioVentas y FormularioProductos, les pondremos un color de fondo diferente entre sí para distinguirlos claramente.

(Estando seleccionado el formulario, ficha Diseño, marcar la opción Hoja de propiedades, y allí seleccionar Formulario ó Detalle en el desplegable. Modificar las propiedades del formulario y del detalle del mismo.)

Una vez hecho, guardar y cerrar los formularios, que deberán aparecer en el panel de navegación.

Paso 3: crear una macro con acciones

En la ficha Crear seleccionar Macro.

La macro contendrá las acciones del menú, que en este ejemplo serán las de abrir los formularios y la de cerrar Access.

Añadir una Submacro, poner el nombre SubAbrirFormularioProductos.
Añadirle una acción AbrirFormulario. En Nombre del formulario seleccionar del desplegable FormularioProductos.

Añadir otra Submacro, poner el nombre SubAbrirFormularioVentas.
Añadirle una acción AbrirFormulario. En Nombre del formulario seleccionar del desplegable FormularioVentas.

Añadir una última Submacro, poner el nombre SubSalir.
Añadirle una acción SalirDeAccess. Seleccionar la opción Preguntar.

El contenido completo de la macro deberá quedar así:



Guardar la macro bajo el nombre MacroAcciones y cerrar.

Hasta aquí se han creado los elementos necesarios para el menú: el menú llamará a estas submacros, dos de esas submacros abren los formularios que habíamos creado en el punto anterior.

Paso 5: crear la tabla del sistema para alojar el menú

En la ficha Crear seleccionar Tabla.
Parar al modo diseño y guardar la tabla bajo el nombre USysRibbons.

En la vista diseño, crear dos campos en la tabla:
  • RibbonName, de tipo texto (texto corto en Access 2013), dejarle 255 caracteres como tamaño del campo que es el valor por defecto.
  • RibbonXml, de tipo memo (texto largo en Access 2007 y Access 2010).


El campo Id que aparece por defecto al crearse la tabla puede dejarse o eliminarse, no es necesario y su existencia tampoco afectará al comportamiento del menú.

La particularidad del nombre de la tabla y de sus campos harán que Access identifique dicha tabla como la que contiene la definición del menú que debe cargarse.

Guardar la tabla y pasar a la vista hoja de datos.

Paso 6: escribir el XML para personalizar la cinta de opciones

Será necesario un editor para escribir el XML que describa las especificaciones de la cinta de opciones.
Puede ser un editor de texto plano como es el bloc de notas de Windows, o puede utilizarse un editor que reconozca el lenguaje de etiquetado, como NotePad++ o Visual Studio.

En la tabla escribiremos un único registro.

En el campo RibbonName poner MiMenu.

En el campo RibbonXml pegar el siguiente código XML:

<customUI xmlns="http://schemas.microsoft.com/office/2006/01/customui">
  <ribbon startFromScratch="true">
    <tabs>
      <tab id="ficha01" label="FORMULARIOS" visible="true">
        <group id="grupo01" label="Grupo de Formularios">
          <button id="boton01" size="large" label="Ventas" onAction="MacroAcciones.SubAbrirFormularioVentas" imageMso="SlideMasterChartPlaceholderInsert">
          </button>
          <button id="boton02" size="large" label="Productos" onAction="MacroAcciones.SubAbrirFormularioProductos" imageMso="PivotChartClearMenu">
          </button>
          <separator id="separador01" ></separator>
          <button id="boton03" size="large" label="Salir" onAction="MacroAcciones.SubSalir" imageMso="MasterViewClose" ></button>
        </group>
      </tab>
    </tabs>
  </ribbon>
</customUI>

Guardar todo y cerrar Access. De esta forma al volver a abrirlo ya habrá identificado la tabla que habíamos creado como una tabla de sistema.

Ir al menú ArchivoOpciones y seleccionar Base de datos actual.

En la sección Opciones de barra de herramientas y cinta de opciones, seleccionar el menú que hemos creado. En el desplegable aparecerá la opción MiMenu.


Al aceptar este cambio, Access nos dirá que debe cerrar y volver a abrir la base de datos para que los cambios especificados tengan efecto.

Al cerrar y volver a abrir, veremos que solamente aparece el menú Archivo y la nueva ficha de menú, ocultándose toda la cinta de opciones predeterminadas de Access.


Explicación del XML del ejemplo
  • CustomUI: es la primer etiqueta y debe escribirse toda la línea tal cual. Esto indica a Office que se va a hacer uso de un menú Ribbon personalizado.
  • ribbon: indica la definición del menú. Mediante el atributo startFromScratch, que traducido es "empezar desde el principio", se indica si la definición del menú viene a reemplazar todo el menú (valor true) o si la definición es una modificación del menú (valor false).

    Si en este ejemplo se indicara startFromScratch="false" como resultado veremos que se han añadido las fichas de menú, pero las demás fichas predeterminadas de Access permanecen. También se utiliza este valor si lo que se quiere es ocultar una ficha o una opción del menú en concreto, y dejar todas las demás tal cual.
  • tabs: indica que dentro de este etiqueta se definirán las pestañas o fichas del menú.
  • tab: indica la definición de una ficha en concreto. El atributo label será el texto que aparecerá en la ficha. También se puede indicar su visibilidad. Es muy importante indicar un identificador único con la propiedad id y que el mismo no se repita en todo el XML.
  • group: indica el grupo de botones, controles (podría ser un check box, una lista desplegable, etc.) y opciones de la ficha, incluso otros menús desplegables en cascada. Para este ejemplo sólo se han utilizado botones.
  • button: define un botón dentro de la ficha. Tiene varios modificadores:
    (Para obtener una definición completa de este elemento ver El elemento button [Ribbon Menu])

    id: debe ser un identificador único, no debe repetirse en todo el XML.

    label: texto o etiqueta del botón.

    onAction: acción que debe cometer el botón, que puede ser llamar a una macro, a un procedimiento, ejecutar directamente una directiva de VBA.

    imageMSO: imagen de Office a la que se hace referencia y que se va a mostrar en el botón. (Para saber cómo obtener un valor válido para esta propiedad ver El atributo imageMso [Ribbon Menu])
  • separator: como su nombre lo indica dibuja una línea de separación entre los elementos del grupo.

FIN.