El elemento button [Ribbon Menu]

Elemento de Ribbon Menu.
Se aplica a Access 2007, Access 2010, Access 2013 y Access 2016.

Para el ejemplo se ha utilizado Access 2010.

El control button es un elemento básico y necesario para crear un menú personalizado en la cinta de opciones.

En el XML esta etiqueta debe encontrarse dentro de la etiqueta group.

A continuación se explican los diferentes atributos de button con ejemplos.


id

Especifica el identificador del control personalizado de nueva creación.

Si no se especifica un id para el botón personalizado no se mostrará, pero no generará un error y el resto de la definición del menú personalizado se mostrará igualmente.


idMso

Especifica el identificador del control personalizado predefinido de Office.

Con este atributo se puede crear una réplica de un botón ya existente en Office, para incluirlo en una cinta de opciones personalizada.

O también puede utilizarse para referirse a un elemento existente de Office para ocultarlo o inhabilitarlo.
NOTA: el atributo id y el atributo idMso son mutuamente excluyentes. Mientras uno se utiliza para un botón de nueva creación, el otro es para modificar un botón preexistente de Office. Cabe recordar también que todos los controles personalizados deben tener un identificador y que éste debe ser único en todo el XML.

label

Especifica una cadena que será la etiqueta del control.

Su uso no es obligatorio, pero si no se indica una etiqueta de texto tendrá que indicarse una imagen para que se visualice el botón.


image

Especifica una imagen a mostrar en el control, a modo de icono.
Esta imagen es un archivo externo.

No es posible hacer referencia a la ruta y nombre del archivo en la definición XML. Para cargar la imagen en tiempo de ejecución, se ha de llamar a una función que carge imágenes utilizando el atributo general loadImage, o utilizar el atributo getImage del propio botón para que llame a una función que cargue las imágenes mediante código.

Su uso no es obligatorio, pero si no se indica una imagen tendrá que indicarse una etiqueta de texto para que se visualice el botón.


imageMso

Especifica una imagen a mostrar en el control, a modo de icono.
El nombre de la imagen hace referencia a una que ya viene incorporada en Office.

En la página El atributo imageMso [Ribbon Menu] se describe cómo obtener un nombre válido para esta propiedad.

NOTA: el atributo image y el atributo imageMso son mutuamente excluyentes. Mientras que el primero hace referencia a un archivo de imagen, el segundo atributo se utiliza para referirse a una imagen que ya viene incorporada en Office.

size

Indica el tamaño del botón.
Se pueden indicar dos valores: normal y large.

Por defecto, si no se indica nada, el tamaño del botón será normal.
La altura de un botón large equivale a la de tres botones normal.


enabled

Indica si el botón está habilitado. Acepta los valores true o false.
De forma predeterminada, si no se indica nada, el botón estará habilitado.
Si está inhabilitado (enabled="false") el botón aparecerá en color gris.

Esta propiedad es muy útil en dos ocasiones frecuentes:

  • se desea inhabilitar un botón porque el usuario que ha accedido a la aplicación no tiene los permisos necesarios
  • se desea inhabilitar un botón predeterminado de Office


visible

Indica si el botón es visible. Acepta los valores true o false.
De forma predeterminada, si no se indica nada, el botón estará visible.
Si está no visible (visible="false") el botón no se verá.


onAction

Indica la acción del botón, la función o macro que se ejecutará cuando el usuario haga clic en el botón.

Se puede indicar como acción al evento clic una función de VBA o una macro.


getImage

Indica la función a la que se llamará para construir el botón y que devolverá la imagen que será utilizada como icono en dicho control.

La función no se llamará hasta que sea necesario dibujar y mostrar el botón.

Es decir, si al abrir la aplicación, el botón con una llamada a función con getImage no está visible, porque está en otra pestaña que no es la primera que se visualiza, no se llamará a la función. Recién cuando se navegue por el menú y sea necesario mostrar el botón es cuando se llamará a la función.


keyTip

screenTip

superTip

showImage

showLabel

tag



loadImage (método general, pero merece explicación y ejemplo)



Ejemplo 1: botones con imágenes internas 

Se utilizan las imágenes de Office, disponibles en Access.
También se muestra el separador, botones de diferente tamaño y dos grupos de botones en una misma pestaña.


<customUI xmlns="http://schemas.microsoft.com/office/2006/01/customui">
<ribbon startFromScratch="true">
<tabs>
<tab id="pestaña01" label="Pestaña 1" visible="true">
<group id="grupo01" label="Grupo 1">
<button id="button01" label="Botón 1" size="large" imageMso="FileManageMenu" />
<button id="button02" label="Botón 2" size="large" imageMso="DatabaseMoveToSharePoint" />
<separator id="separador01"/>
<button id="button03" label="Botón 3" size="normal" imageMso="ControlLayoutStacked" />
<button id="button04" label="Botón 4" imageMso="AccessFormDatasheet" />
<button id="button05" label="Botón 5" imageMso="CreateFormBlankForm" />
</group>
<group id="grupo02" label="Grupo 2">
<button id="button06" label="Botón 6" size="large" imageMso="AccessListAssets" />
<button id="button07" label="Botón 7" size="large" imageMso="AccessListContacts" />
</group>
</tab>
</tabs>
</ribbon>
</customUI>



Ejemplo 2: botones con imágenes de archivos externos



Se puede utilizar cualquier tipo de imagen de archivo externo, en este ejemplo se utilizan unas que no tienen transparencia, pues el tratamiento para cargarlas es diferente.

Al visualizarse la pestaña del menú (no antes) se llama a un método en código VBA que será el encargado de cargar dichas imágenes.

Las imágenes siguientes están en la misma carpeta que la base de datos Access. Se trata de imágenes jpg de 64 píxeles de lado.
caracol.jpg tortuga.jpgleon.jpg

Las imágenes pueden ponerse en cualquier ruta, pero luego en el código debe especificarse exactamente dicha ruta para que la aplicación las encuentre.

En el editor de código de la base de datos, en un módulo de código cualquiera, se tendrá el método público que leerá las imágenes.

Public Sub obtenerImagenes(control As IRibbonControl, ByRef imagen)
    Set imagen = LoadPicture(CurrentProject.Path & "\" & control.Tag)
End Sub

Este método servirá para cualquier botón que lo llame, y su función es cargar el archivo de imagen indicado en el texto de la propiedad tag de dicho botón.

Por otro lado, en la tabla USysRibbons se establece el menú personalizado, que define dos grupos de tres botones cada uno, con diferentes tamaños.

<customUI xmlns="http://schemas.microsoft.com/office/2006/01/customui">
<ribbon startFromScratch="true">
<tabs>
<tab id="pestaña01" label="Pestaña 1" visible="true">
<group id="grupo01" label="Grupo 1">
<button id="button01" label="Caracol" size="large" tag="caracol.jpg" getImage="obtenerImagenes" />
<button id="button02" label="Tortuga" size="large" tag="tortuga.jpg" getImage="obtenerImagenes" />
<button id="button03" label="León" size="large" tag="leon.jpg" getImage="obtenerImagenes" />
</group>
<group id="grupo02" label="Grupo 2">
<button id="button04" label="Caracol" tag="caracol.jpg" getImage="obtenerImagenes" />
<button id="button05" label="Tortuga" tag="tortuga.jpg" getImage="obtenerImagenes" />
<button id="button06" label="León" tag="leon.jpg" getImage="obtenerImagenes" />
</group>
</tab>
</tabs>
</ribbon>
</customUI>

En la propiedad getImage se indica el nombre del método al que se debe llamar para obtener la imagen.

Y en la propiedad tag se está pasando una etiqueta, un texto, un valor que será el que utilizará el método VBA para obtener el nombre de la imagen que se debe cargar.

Como puede verse en la primera imagen de este ejemplo, las imágenes del menú se redimensionan automáticamente según el tamaño del botón que se dibuja.



Ejemplo 3: inhabilitar y ocultar distintos elementos predeterminados de Office

Mediante el identificador de control de Office idMso, se puede hacer referencia a un elemento preexistente e indicar un comportamiento o una propiedad diferente.

En el siguiente ejemplo se consigue lo siguiente:

  • ocultar todo el grupo Registros de la pestaña Inicio.
  • inhabilitar el control Negrita de la pestaña Inicio en el grupo Formato de texto.
  • ocultar toda la pestaña Crear.
  • inhabilitar el botón Administrador de tablas vinculadas que está en el grupo Importar y vincular de la pestaña Datos externos.

<customUI xmlns="http://schemas.microsoft.com/office/2006/01/customui">
<commands>
<command idMso="Bold" enabled="false" />
</commands>
<ribbon startFromScratch="false">
<tabs>
<tab idMso="TabHomeAccess" >
<group idMso="GroupRecords" visible="false" />
</tab>
<tab idMso="TabCreate" visible="false" />
<tab idMso="TabExternalData">
<group idMso="GroupImport">
<button idMso="ImportSavedImports" enabled="false" />
</group>
</tab>
</tabs>
</ribbon>
</customUI>



Ejemplo 4: llamadas a funciones, acciones del botón, distintos usos de onAction

El siguiente ejemplo muestra distintas formas de asignar una acción a un botón.


<customUI xmlns="http://schemas.microsoft.com/office/2006/01/customui">
<ribbon startFromScratch="true">
<tabs>
<tab id="pestaña01" label="Pestaña 1" visible="true">
<group id="grupo01" label="Grupo 1">
<button id="button01" label="Botón 1" size="large" imageMso="PropertySheet" onAction="MostrarMensajeDesdeVBA" />
<button id="button02" label="Botón 2" size="large" imageMso="AdpManageIndexes" onAction="=MostrarOtroMensajeDesdeVBA()" />
<button id="button03" label="Botón 3" size="large" imageMso="FileManageMenu" onAction="=MsgBox('Esta es una función VBA directamente en el botón.')" />
<button id="button04" label="Botón 4" size="large" imageMso="CreateFormNavigationTopLeft" onAction="Macro1" />
</group>
</tab>
</tabs>
</ribbon>
</customUI>

La definición del menú mediante la tabla USysRibbons se explica a continuación.

1. El primer botón llama a un código VBA.

En el editor de código VBA, y en un módulo cualquiera, crear la siguiente función: 

Public Sub MostrarMensajeDesdeVBA(control As IRibbonControl)

    MsgBox "Esta es una llamada a una función VBA.", vbOKOnly + vbInformation, "Mensaje desde VBA"

End Sub

Puede ser una función o una sub, que siempre ha de ser pública. 

Se ha de indicar a qué se refiere, es decir, el elemento recibe como parámetro. En este caso es un IRibbonControl. Esta función funciona como un evento suscrito al control.

Esta forma de llamar a una función es útil cuando se desea pasar parámetros del control que llama.

2. El segundo botón también llama a un código VBA, pero de una forma distinta

Si se quiere llamar a una sub o función sin pasar como parámetro el control, una llamada "normal", se debe de utilizar el símbolo igual en la llamada.

Así, en el mismo módulo, crear la siguiente función pública:

Public Function MostrarOtroMensajeDesdeVBA()

    MsgBox "Esta es una llamada a otra función VBA.", vbOKOnly + vbInformation, "Mensaje desde VBA"

End Function

3. El tercer botón tiene una función VBA directamente en la definición del menú, no llama a ningún código.

De la misma forma que se llama a una función personalizada, se puede llamar a una función de VBA como MsgBox.

=MsgBox('Esta es una función VBA directamente en el botón.')

4. El cuarto botón finalmente llama a una macro llamada Macro1 y cuya definición es la siguiente:





PÁGINA EN CONSTRUCCIÓN