Crear menus y botones en la cinta de opciones (RIBBON) de access 2007 y 2010

A continuación explico cómo crear un menú y algunos botones en Access 2007 de una forma práctica y funcional sin tanta vuelta, ni tanto invento y sin mucha complicación, de hecho el codificar en XML ya es tedioso. Este ejemplo lo he tomado de una aplicación que desarrolle para la empresa en que laboro. Esta aplicación está siendo utilizada por 70 usuarios aproximadamente, pocos en relación a las grandes corporaciones q hoy en día existen, pero suficientes para demostrar es un ejemplo q funciona al 100%.

image

Lo primero q se debe hacer es crear una tabla en la base de datos actual con el nombre USysRibbons con la siguiente estructura:

campo ID recomiendo q sea automatico

campo RibbonName de tipo texto y el número de caracteres 50 (field Size) al fin solo es para digitar un nombre asignado a la cinta de opciones

campo RibbonXml debe ser de tipo memo con la propiedad Text Format: Plain Text

image

El código para el campo RibbonXml es el siguiente (se explica cada estructura y al final se muestra el código terminado):

El siguiente código siempre de debe incluirse:

<customUI xmlns=»http://schemas.microsoft.com/office/2006/01/customui»>

</customUI>

Este codigo debe ir en cada cinta de opciones o Ribbon por q ? porque si, explicarlo no tiene mucha relevancia solo agregalo.

El siguiente código debe ser:

<tabs>

</tabs>

Esta etiqueta indica el comienzo del desarrollo de nuevas fichas en la cinta de opciones; en la siguiente imagen se pueden ver 3 fichas: SHORTCUTS, FICHA02 Y FICHA03

image

Para crear cada ficha se utiliza la siguiente etiqueta:

<tab id=»ficha02″ label=»FICHA02″ visible=»true»>

</tab>

En donde tab id=”ficha02” indica un id único en todo el código xml necesario para crear cada cinta de opciones.

Label=”FICHA02” indica el nombre que el usuario final vera en la pantalla de Access. Se recomienda q este nombre sea el mismo q el nombre de tab Id

Visible=”true” muestra u oculta la ficha.

Hasta aquí el código debe estar asi:

<customUI xmlns=»http://schemas.microsoft.com/office/2006/01/customui»>

<tabs>

<tab id=»shortcutsID» label=»SHORTCUTS» visible=»true»>

</tab>

<tab id=»ficha02″ label=»FICHA02″ visible=»true»>

</tab>

<tab id=»ficha03″ label=»FICHA03″ visible=»true»>

</tab>

</tabs>

</customUI>

La siguiente etiqueta es:<group id=»aplicacion» label=» APPLICATION»></group>Este etiqueta agrupa botones o menues y su nombre se visualiza debajo de la cinta de opciones, en la siguiente imagen se muestra en círculos rojos el nombre de cada grupo.
image

Dentro de la etiqueta GROUP se crea cada botón y/o menú con la siguiente etiqueta:

<button id=»RiskID»

size=»large»

label=»IMPORTING»

imageMso=»DefinePrintStyles»

onAction=»MENURIBBON.ANALISIS»

screentip=»IMPORTING TITLE 31″

supertip=»Import from Excel the Title31 generated by FxClient»

/>

En donde:

Botton id=”identificador único para el boton”

Size=”large”; esta etiqueta solo se utiliza cuando se quiere ver grande el botón casi siempre para que se muestre mejor el icono o imagen, cuando no se quiere mostrar grande el botón simplemente no se digita esta etiqueta o se coloca en Size=“normal”

Label=”nombre q vera el usuario”

imageMso=”nombre de la imagen q se mostrara en la cinta de opciones”; mas adelante se extiende la explicación para esta etiqueta

onAction=»código q se ejecutara al presionar el boton» mas adelante se extiende la explicación de esta etiqueta

screentip=»una pequena referencia para el usuario final»

supertip=»Un pequeño resumen sobre esta función dentro de la base de datos»

En la siguiente imagen ver botón ACR

image
El código para el botón ACR es el siguiente:<button id=»acr»size=»large»label=»ACR»imageMso=»ChartShowData»

onAction=»nombreDeMacroOfuncion»

screentip=»UPDATE ACR»

supertip=»Open and update basic information to ACR according title 31 information»

/>

Este codigo tambien se puede agregar en una solo linea

Para obtener el nombre de las imágenes Microsoft tiene un libro de Excel en este momento no tengo dicho link pero lo subi a mi skydrive el link es:

http://cid-c8c51ba9513ed58a.office.live.com/self.aspx/P%c3%bablico/Office2007IconsGallery.xlsm

aclaro este libro de Excel contiene macros pero son de Microsoft no son mias no tienen ningún riesgo.

Este libro el nombre de las imágenes de las aplicaciones de office para ver el nombre te vas a la ficha Developer, haces clic en cada galería y dentro de cada galería están todas las imágenes de Office hace un clic en cada imagen y aparece una ventana o cuadro de dialogo con el nombre de cada imagen. Este nombre debe escribirse dentro de la etiqueta imageMso=»QueryAppend». Debe escribirse igual como se muestra en la ventana imageMso, respetando mayúsculas y minúsculas.

mSo

Este proceso nos limita a q solo podemos utilizar las imágenes de office en otras palabras solo las imágenes de estas 9 galerias en el libro Office2007IconsGallery.xlsm.

Para poder utilizar nuestras imágenes o imágenes q no estén en estas galerías debemos utilizar la siguiente función:

Function ObtenerPicture(control As IRibbonControl, ByRef image)

Select Case control.Id

Case «idBoton»

Set image = LoadPicture(CurrentProject.Path & «\nombredelpicture.jpg»)

End Select

End Function

En donde:

Cada case el nombre que se agrego en cada id de cada etiqueta (button ID=”ACR”).

Por ejemplo agregaremos un botón a la cinta opciones asi:

<button id=»logo»

size=»large»

label=»Ria Envia»

getImage=»ObtenerPicture»

onAction=»accion»

screentip=»Logo de la Empresa»

supertip=»Este es el identificador de la Empresa q está utilizando esta aplicacion»

/>

Analizando este código podemos ver q la línea de código imageMso=»ChartShowData» cambio a getImage=»onGetImages»; arriba en negrita, en donde getImage indica q se debe leer una función y ObtenerPicture es el nombre de la función q ya creamos anteriormente q devuelve una imagen. El resultado es el siguiente:

clip_image002

El primer botón tiene una imagen propia de la empresa (getImage=»ObtenerPicture») y el otro botón tiene una imagen prediseñada de Office (imageMso=»ChartShowData»).

Para darle acción a cada botón la forma más fácil q yo conozco es crear macros y asignarlas a la etiqueta OnAction de cada botón.

Ejemplo se crea una macro con diferentes opciones o con submacros o un depositario para macros asi:

clip_image004

Después a cada boton en la etiqueta OnAction se le coloca en nombre de la macro y de la submacro asi:

OnAction= “MacroPrincipal.submacro”

OnAction = “MenuRibbon.country”

<button id=»acr»

size=»large»

label=»ACR»

imageMso=»ChartShowData»

onAction=» MenuRibbon.ACR»

screentip=»UPDATE ACR»

supertip=»Open and update basic information to ACR according title 31 information»

/>

Para crear un menú de la siguiente forma

clip_image006

El código es:

<menu id=»MyMenu» size=»large» imageMso=»TabOrder» label=»Stadistics» itemSize=»normal»>

<menu id=»AVGID» label=»AVERAGE» itemSize=»normal»>

<button id=»avgbysender»

label=»Average by Sender Name»

imageMso=»FilePrepareMenu»

onAction=»menuRibbon.BYSENDERN»/>

<button id=»avgbysenderadd»

label=»Average by Sender Address»

imageMso=»FilePrepareMenu»

onAction=»menuRibbon.BYSENDERAD»/>

<button id=»avgbybenef»

label=»Average by Paying Country»

imageMso=»FilePrepareMenu»

onAction=»menuRibbon.BYCOUNTRY»/>

</menu>

</menu>

Las indicaciones para las etiquetas son las mismas q ya se explicaron anteriormente a diferencia de la etiquteta itemSize=»normal» o itemSize=»large» q mostrara los iconos de diferente tamaño.

El resultado será el siquiente:

clip_image008

El código desarrollado hasta aquí es el siguiente:

<customUI xmlns=»http://schemas.microsoft.com/office/2006/01/customui»>

<ribbon startFromScratch=»true»>

<tabs>

<tab id=»shortcutsID» label=»SHORTCUTS» visible=»true»>

<group id=»aplicacion» label=» APPLICATION»>

<button id=»logo» size=»large»

label=»Ria Envia»

getImage=»onGetImages»

onAction=»accion»

screentip=»Logo de la Empresa»

supertip=»Este es el identificardor de la Empresa q esta utilizando esta aplicacion» />

<button id=»acr»

size=»large»

label=»ACR»

imageMso=»ChartShowData»

onAction=»nombreDeMacroOfuncion»

screentip=»UPDATE ACR»

supertip=»Open and update basic information to ACR according title 31 information»

/>

<menu id=»MyMenu» size=»large» imageMso=»TabOrder» label=»Stadistics» itemSize=»normal»>

<menu id=»AVGID» label=»AVERAGE» itemSize=»normal»>

<button id=»avgbysender»

label=»Average by Sender Name»

imageMso=»FilePrepareMenu»

onAction=»menuRibbon.BYSENDERN»/>

<button id=»avgbysenderadd»

label=»Average by Sender Address»

imageMso=»FilePrepareMenu»

onAction=»menuRibbon.BYSENDERAD»/>

<button id=»avgbybenef»

label=»Average by Paying Country»

imageMso=»FilePrepareMenu»

onAction=»menuRibbon.BYCOUNTRY»/>

</menu>

</menu>

</group>

</tab>

<tab id=»ficha02″ label=»FICHA02″ visible=»true»>

</tab>

<tab id=»ficha03″ label=»FICHA03″ visible=»true»>

</tab>

</tabs>

</ribbon>

</customUI>

Para un resultado mas estetico se pueden utilizar una par de etiquetas:

<box id=»myBox1_v» boxStyle=»vertical»>

Lo mas relevante de esta etiqueta es q permite ordenar de forma horizontal o vertical los botones para lograr este efecto se cambia el valor de la etiqueta boxStyle=”horizontal” o boxStyle=”vertical”.

Otra etiqueta es: <separator id=»MySeparator01″/> esta etiqueta crea un separado entre una y otra etiqueta de tipo box. Estas dos etiquetas se utilizan después de la etiqueta GROUP y antes de la etiqueta BUTTON

el código es el siguiente:

<group id=»aplicacion» label=» APPLICATION»>

<box id=»myBox1″ boxStyle=»vertical»>

Botones

</box>

<separator id=»MySeparator01″/>

<box id=»myBox2″ boxStyle=»vertical»>

</box>

La cinta de opciones lucira asi:

clip_image010

El único cambio q se visualiza es una línea entre los botones y el menú para ver una diferencia notable deberíamos tener mas botones y no de tamaño large. A continuación muestro una cinta de Opciones o Ribbon de otra aplicación q desarrolle en donde podremos ver la diferencia de utilizar la etiqueta BOX y SEPARATOR. Véase botones Department, Status y Job Titles

clip_image012Etiqueta box con el valor BoxStyle=”horizontal” clip_image014Etiqueta box con el valor BoxStyle=”vertical”

Otro ejemplo de menú con el atributo itemSize=”large” :

clip_image016

Hasta aquí tenemos la información suficiente para crear una barra de opciones. De aquí en adelante se explican detalles para mejorar la aplicación.

El siguiente código oculta la cinta de opciones de Access y solo muestra nuestra cinta de opciones

<ribbon startFromScratch=»true»>

Q se digita después de la etiqueta <customUI xmlns …

También el siguiente código es necsario para ocultar la ficha CREATE de la cinta de opciones de access

<tab idMso=»TabCreate» visible=»false» />

Se digita después de la etiqueta <tabs>

Con el siguiente código se habilitan y deshabilitan la opción del menú de Office:

clip_image018 <officeMenu><button idMso=»FileBackupDatabase»visible=»true»/><button idMso=»FileCompactAndRepairDatabase» visible=»true»/>

<button idMso=»FileNewDatabase» visible=»false»/>

<splitButton idMso=»FileSaveAsMenuAccess» visible=»false»/>

</officeMenu>

Este código se digita después de la etiqueta <ribbon startFromScratch=»true»> esto deshabilita las opciones avanzada q solo deberían estar habilitadas para el desarrollador y deja solo las herramientas necesarias a mi criterio para el usuario final:

clip_image020

La etiqueta

<commands>

<command idMso=»ApplicationOptionsDialog» enabled=»true»/>

</commands>

Habilita o deshabilita el boton Access Options ver imagen anterior solo es necesario cambiar el valor enable=”false”, este boton es mejor deshabilitarlo cuando tenemos usuarios finales q se creen usuarios avanzados y después de joder, perdón des configurar la aplicación nos llaman diciendo q no saben por q se arruino el sistema. Este código se debe digitar antes de la etiqueta <ribbon startFromScratch=»true»>

IMPORTANTE:

Para activar la ficha Developer o Programador en Excel: http://www.youtube.com/watch?hl=es&v=BrvUV3hqdf4

EL CODIGO FINAL SERA:

<customUI xmlns=»http://schemas.microsoft.com/office/2006/01/customui»>

<commands>

<command idMso=»ApplicationOptionsDialog» enabled=»true»/>

</commands>

<ribbon startFromScratch=»true»>

<officeMenu>

<button idMso=»FileBackupDatabase» visible=»true»/>

<button idMso=»FileCompactAndRepairDatabase» visible=»true»/>

<button idMso=»FileNewDatabase» visible=»false»/>

<splitButton idMso=»FileSaveAsMenuAccess» visible=»false»/>

</officeMenu>

<tabs>

<tab idMso=»TabCreate» visible=»false» />

<tab id=»shortcutsID» label=»SHORTCUTS» visible=»true»>

<group id=»aplicacion» label=» APPLICATION»>

<box id=»myBox1_v» boxStyle=»vertical»>

<button id=»logo» size=»large» label=»Ria Envia» getImage=»onGetImages» onAction=»accion»

screentip=»Logo de la Empresa» supertip=»Este es el identificardor de la Empresa q esta utilizando esta aplicacion» />

<button id=»acr»

size=»large»

label=»ACR»

imageMso=»ChartShowData»

onAction=»nombreDeMacroOfuncion»

screentip=»UPDATE ACR»

supertip=»Open and update basic information to ACR according title 31 information»

/>

</box>

<separator id=»MySeparator01″/>

<box id=»myBox2_v» boxStyle=»vertical»>

<menu id=»MyMenu» size=»large» imageMso=»TabOrder» label=»Stadistics» itemSize=»normal»>

<menu id=»AVGID» label=»AVERAGE» itemSize=»normal»>

<button id=»avgbysender»

label=»Average by Sender Name»

imageMso=»FilePrepareMenu»

onAction=»menuRibbon.BYSENDERN»/>

<button id=»avgbysenderadd»

label=»Average by Sender Address»

imageMso=»FilePrepareMenu»

onAction=»menuRibbon.BYSENDERAD»/>

<button id=»avgbybenef»

label=»Average by Paying Country»

imageMso=»FilePrepareMenu»

onAction=»menuRibbon.BYCOUNTRY»/>

</menu>

</menu>

</box>

</group>

</tab>

<tab id=»ficha02″ label=»FICHA02″ visible=»true»>

</tab>

<tab id=»ficha03″ label=»FICHA03″ visible=»true»>

</tab>

</tabs>

</ribbon>

</customUI>

Existen mas objetos, etiquetas, otras formas de llamar funciones y demás objetos de access q se pueden utilizar en una cinta de Opciones pero con estos es mas que suficiente para crear un sistema de menues y accesos directos (botones) para q el usuario final tenga acceso a las diferentes funciones de la base de datos.

Aclaro que esta es solo una forma de crear Ribbon y he tratado de hacerlo de una forma sencilla, si tenes alguna pregunta publicala en este articulo y con gusto te contesto.

Actualizacion de este Articulo: http://wp.me/p16zEv-19

 

Acerca de Antonio

publico lo q me parece interesante en el momento q estoy viviendo Ver todas las entradas de Antonio

44 respuesta a «Crear menus y botones en la cinta de opciones (RIBBON) de access 2007 y 2010»

  • Armando Montoya

    hola, amigo, que tal, muy interesante tu articulo. te quiero comentar que actualmente estoy realizando una base de datos para la empresa donde trabajo, ya tengo todos los formularios y reportes unicamente me hace falta el menu, para eso compre el ribbon creator, pero la verdad se me esta haciendo un poco complicado a la hora de mandar llamar mis reportes, el problema es con los filtros que quiero utilizar. podras ayudarme a salir de mis dudas. gracias por tu tiempo. Armando. gracias

  • manel

    Muy bueno el articulo, pero no sabras como se hace para que no salga el tip de «Presione f1 para obtener más ayuda» cuando tienes el raton sobre el boton?,
    es para evitar que digan que no funciona la ayuda.

    Gracias

    Manel

  • johan

    WOW, muy buen articulo. Felicitaciones!

  • Liliana

    Muuuy interesante y completo tu articulo, estas cosas son las que vale la pena subir a la red 😉

  • arndrake

    Hola , gracias por tu aporte , te voy a hacer una pregunta algo panfila , tengo una db de access y estoy creando un menu en la cinta de opciones y una de las cosas que me interesa que haga es que se pueda navegar de un formulario a otro a través de la cinta de opciones , podrías explicarme como hacerlo de una forma sencilla? gracias de antemano

  • Alejandro

    Luego de perder mucho tiempo buscando en la red el tema ribbons de casualidad llegué aquí, logrando completamente mi propósito. Te agradezco infinitamente tu entrega y tu practicidad, que evidentemente es tu mayor don. Un abrazo.

  • Cemeza

    Hola, Muy bueno e interesante tu artículo, te queria comentar una pequeña duda, Sabes como hacer esto mismo pero en Excel??.
    Cualquier ayuda que me brindes será bienvenida.
    Gracias por tu tiempo.

    • Antonio

      es mas facil descarga el programa (Custom UI Editor for Microsoft Office) de este link: http://www.megaupload.com/?d=AJEYB38C

      1. abres el archivo de excel .xlsm desde el programa descargado

      2. en el Menu Insert clic en Office 2007 Custom UI Part

      3. en el Menu Insert clic en Sample XML, clic en Custom Tab en este punto se insertar una rutina de codigo parecido al de la cinta de Access modificar en la linea: el numero 2009 por 2006 y el numero 07 por 01.

      despues el resto de comandos para construir el menu es igual al ejemplo antes publicado.

  • William Cossio A

    Te cuento que cree la tabla USysRibbons con la estructura que dijiste. En el campo RibbonXml de tipo Memo escribí el código que dijiste AL FINAL SERA. En el campo nombre RibbonName le digité el Nombre Application como nombre de la cinta de opciones y luego no se que mas hacer, por qué cierro la tabla luego cierro la base y al volverla a abrir no me aparece la conta de opciones que explicaste que aparecería.

  • William Cossio A

    Por favor me puedes enviar via correo la base de datos que creaste?

  • Carlos Jiménez Gómez

    Antonio, me gustó tu artículo; lástima que lo descubro
    más de un año después de que lo escribiste. Espero que
    aún me puedas ayudar. Cree en Access 2010 una base de
    datos en blanco y seguí los pasos como los describiste.
    Al abrir de nuevo la base de datos, la tabla creada quedó
    oculta, por lo que no se puede modificar; además, la
    cinta nunca apareció. No sé si es que hay otro paso
    para pedirle al Access que muestre la cinta, por lo que
    me gustaría que me indicaras algo al respecto. De
    antemano te agradezco la ayuda.

  • gegranados

    Perdón, hoy 11-12-2012 pasé viendo ésta ilustración tan importante. Sin embargo la ubicación de la base de ejemplo ya no está activa. Podrías subirla de nuevo. Gracias

  • saul

    Buenas amigo, el lick mostrado anteriormente puedo accesarlo de algún modo? Muy interesado en aprender hacer este tipo de menú en Acces ya que estoy migrando un sistema desde una versión 2007 a 2010 y quiero darle una nueva apariencia.

  • jose

    Buenas tardes muy bueno el articulo.. solo tento una pregunta en que parte se coloca el codigo de la funcion onGetImages

    function ObtenerPicture(control As IRibbonControl, ByRef image)
    Select Case control.Id
    Case “idBoton”
    Set image = LoadPicture(CurrentProject.Path & “\nombredelpicture.jpg”)
    End Select
    End Function

    Muchas gracias

  • Harold Lopez

    Cordial Saludo,
    Dejame decirte que personas que quieren ayudar a los demas a resolver sus dudas sobre temas importantes, son muy valiosas, por eso te felicito. Por favor no dejes de hacer aportes en este mundo de la informática, hecho que más de uno siempre estaremos agradecidos.

    Segui las instrucciones al pie de la letra y no pude hacer aparecer el menu, ademas quiero saber como debo hacer para que aparezca en todos los computadores donde coloque la aplicación, y por ejemplo, al colocarla en un servidor.

    Cualquier información y tu ejemplo me lo puedes enviar via correo
    Gracias y éxitos.

  • Antonio Belando

    Hola, no existe actualmente este último link.
    Me podrías informar de un nuevo link para poder bajar un ejemplo. Quiero iniciarme en crear menús para una pliacación VBA en Access 2007. Gracias.

  • Antonio Belando Bernal

    Hola Antonio, el link que mencionas no funciona.

    Te agradecería nuevo link para poder descargar el fichero de ejemplo para crear menús desplegables en la aplicación que estoy haciendo en Access 2007 con VBA.

    Gracias y saludos cordiales.

    • Antonio Belando Bernal

      Hola Antonio, perdona que haya puesto tres comentarios para lo mismo, pero es que no aparecían por que no supe activarme en este espacio tuyo.

      Saludos cordiales.

    • Antonio

      hay un nuevo post con nuevos links donde se puede descargar una base de datos

  • Josue Romero

    disculpa por molestar tu valioso tiempo y muy interesante todo ese trabajo tienes algun video que muestre como hacer el Ribbons Gracias…….

  • eduardo

    Muy buen trabajo, me gustaría saber como hacer para abrir un archivo de ayuda personalizado desde el ribbon que uno crea.. muchas gracias

    • Antonio

      haces una función dentro de un modulo de la base datos desde el cual llamas tu archivo de ayuda
      luego hacer un botón con XML y agregas el código «nombredelafuncion()» asi:
      OnAction=»=FuncionAyuda()»

  • Gustavo Briceño

    Hola Antonio, me tomo el atrevimiento de usar tu tiempo para consultarte lo siguiente: al crear un cinta utilizando xml, si la configuras en la opciones del access ella carga al iniciar el access, la interrogante es si existe la posibilidad de cargar otra cinta (creada adicionalmente en la tabla USysRibbons), utilizando VB, por ejemplo: al momento de saber cual usuario accede (suponiendo que tengamos una cinta para unos grupos de usuarios particulares) o si existe alguna otra alternativa de cambiar la cinta de menú mediante VB. Saludos y gracias

Replica a Josue Romero Cancelar la respuesta