Está en la página 1de 12

MANUAL RIBBON

CAPTULO 21

ndice de contenido
INTRO 2: MENUS SIMPLES.............................................................................................................2
ELEMENTOS DE TRABAJO.............................................................................................................2
LOS ELEMENTOS DE NUESTRA CINTA DE OPCIONES.............................................................3
TAB = PESTAA............................................................................................................................3
GROUP = GRUPO DE LA CINTA DE OPCIONES......................................................................3
BOX = CAJA...................................................................................................................................3
MENU = MENU..............................................................................................................................4
BUTTON = BOTN.......................................................................................................................4
MENUSEPARATOR = SEPARADOR DE MEN........................................................................4
PARA CONSEGUIR EL EFECTO DE SUBMEN...........................................................................5
ATRIBUTOS........................................................................................................................................5
ID.....................................................................................................................................................5
LABEL.............................................................................................................................................5
ONACTION.....................................................................................................................................5
BOXSTYLE.....................................................................................................................................5
NUESTRO CONJUNTO DE MENS................................................................................................5
NUESTRO CDIGO XML.................................................................................................................6
PROGRAMANDO NUESTRO MDULO DE VBA.........................................................................8
ULTIMANDO DETALLES.................................................................................................................9
NUESTRO EJEMPLO, PERO CON MACROS..................................................................................9
PROGRAMAR NUESTRA MACRO...........................................................................................10
PROGRAMANDO NUESTRO CDIGO XML..........................................................................12
PARA FINALIZAR EL EJEMPLO....................................................................................................12

La BD y archivos de ejemplo os la podis bajar aqu

Vistame en http://neckkito.siliconproject.com.ar

INTRO 2: MENUS SIMPLES


Ya volvemos a estar aqu... je, je...
En este captulo vamos a profundizar un poquito ms en la
construccin de un ribbon. Y supongo que me preguntaris:
Para decir esto necesitas una introduccin?
Bueno. Pues realmente la introduccin es para comentar
que, una vez que acabemos el captulo, vamos a ser
capaces de tener los conocimientos mnimos para
programar nuestro ribbon a modo de mens (sin botoncitos
de colores ni cosas as). Es decir, que si a alguien le basta
con esto (es decir, el sistema de mens) no har falta que
mire los captulos siguientes (aunque no lo recomiendo... ji,
ji...).
Lgicamente, estamos hablando de un ribbon ms que simple y, como ya he dicho, slo a base
de mens. Pero para no hacerlo tan simple tambin veremos cmo incluir submens.
Ms all de lo anterior, y esto s que ya nos podr servir para prximos captulos, veremos
cmo programar las acciones de nuestro men (lo que sera extrapolable a botones y otros
elementos, con sus ms y sus menos, como ya veremos a lo largo del manual). Explicar las
bases de cmo hacerlo a travs de VBA y cmo hacerlo a travs de macros-objeto.
Finalmente, y para poder ir viendo nuestros progresos de una forma ms prctica, iremos
aplicando todo lo que podris leer sobre una base de ejemplo. Eso me obliga a preparar unas
bases para poder operar luego con el ribbon. Voy a dar por supuesto que tenemos un
conocimiento normal de Access (ni muy bsico pero tampoco muy profundo) y voy
simplemente a enumerar los elementos con los que vamos a trabajar en este ejemplo, y si hay
que hacer algo especial ya lo comentar en su momento.
Y sentenciado lo anterior procedamos a su ejecucin... zassss

ELEMENTOS DE TRABAJO
Para poder desarrollar el ejemplo vamos a necesitar:

Un primer formulario, que llamaremos FMenu.

Un segundo formulario, que llamaremos FDatos

Un informe, que llamaremos RDatos.

Una consulta, que llamaremos CDatos.

Tanto los formularios como el informe son objetos en blanco. Para hacer la consulta (dado
que no tenemos tablas), podemos crearnos una consulta con la siguiente estructura:

Vistame en http://neckkito.siliconproject.com.ar

LOS ELEMENTOS DE NUESTRA CINTA DE


OPCIONES
Vamos a proceder a identificar los elementos de nuestra cinta de opciones antes de entrar en
materia. Eso nos permitir planificar qu es lo que queremos exactamente que pueda hacer el
usuario a travs de nuestro ribbon.
Tened en cuenta que los elementos que describir aqu son slo los elementos que
necesitaremos para este captulo.

TAB = PESTAA
El primer elemento que vamos a tener que definir es la pestaa, que en el cdigo XML est
identificada por la marca <tab>. Sera el elemento que vemos en la ilustracin:

GROUP = GRUPO DE LA CINTA DE OPCIONES


El segundo elemento que definiremos ser el nombre del grupo de opciones. Si nos fijamos en
el ribbon predeterminado de Access se correspondera con los nombres que os marco en la
ilustracin:

BOX = CAJA
El tercer elemento que definiremos es la caja, es decir, qu tipo de layout vamos a utilizar en
nuestra cinta de opciones.
Los valores que admite el elemento box son dos: horizontal y vertical.
Para utilizar otras palabras, lo que viene a indicar la marca <box> es si los controles hijos
van a estar alineados horizontal o verticalmente.
3

Vistame en http://neckkito.siliconproject.com.ar

Por ahora no entraremos en ms detalle porque nos faltan algunos elementos que conocer
todava.

MENU = MENU
Dado que vamos, en este ejemplo, a construirnos una cinta
de opciones a base de men tenemos que identificar los
mens.
Os adelanto, en la siguiente ilustracin, el ribbon que
construiremos en este ejemplo, marcndoos el elemento que
hemos llamado men:

BUTTON = BOTN
Lgicamente, el siguiente elemento que definiremos sern los botones. Ahora bien, como en
este ejemplo hemos dicho que bamos a desarrollar una cinta tipo mens lo botones no sern
tales en el sentido en que imaginamos un botn, sino que darn la impresin de ser un
elemento ms de men.
En la ilustracin podis ver que, dentro del men consultas, est el botn que nos abrir la
consulta, aunque a efectos visuales parezca otro men:

MENUSEPARATOR = SEPARADOR DE MEN


Si tenemos varios botones agrupados (botones con aspecto visual de men) puede
interesarnos, para que nos quede ms bonito, intercalar un separador entre uno y otro. En
este caso utilizaramos el elemento menuSeparator, haciendo que nuestro men presentara un
aspecto como el de la siguiente ilustracin:

Vistame en http://neckkito.siliconproject.com.ar

PARA CONSEGUIR EL EFECTO DE


SUBMEN
Para conseguir el efecto de submen no es necesario hacer
nada especial, sino que basta que introduzcamos una marca
<menu> dentro de otra marca <menu>.
Con ello quiero decir que no necesitamos ninguna
nomenclatura especial de marca. La estructura del cdigo
XML para conseguir esto sera:
<menu [atributos]>
<menu [atributos]>
<button [atributos]>
</menu>
</menu>

Fcil, verdad?

ATRIBUTOS
Los atributos que vamos a manejar en este ejemplo, algunos de los cuales ya deberan
sonarnos, son:

ID
Identificador del elemento que estemos manipulando

LABEL
Nombre que veremos en la cinta de opciones.

ONACTION
Para indicar el nombre del procedimiento (en ingls, hablando de ribbons, se hace referencia al
mismo con el nombre de Callback).

BOXSTYLE
Atributo de nuestro elemento box, para decirle si la alineacin de los controles hijos debe ser
horizontal o vertical.

NUESTRO CONJUNTO DE MENS


Como ya habris intuido por las ilustraciones vamos a intentar conseguir lo siguiente:
Una pestaa con un grupo de opciones, y dentro de este grupo vamos a tener:

Un men para formularios


Para abrir FMenu
Para abrir FDatos
5

Vistame en http://neckkito.siliconproject.com.ar

Un men para Consultas


Para abrir CDatos

Un men para Informes


Un submen
Para abrir RDatos en vista Informes
Para abrir RDatos en vista preliminar
Para imprimir RDatos

NUESTRO CDIGO XML


Vamos a programar nuestro cdigo XML. Lo voy a ir explicando paso a paso.
Ahora bien, un pequeo comentario antes de empezar:
El cdigo que voy a ir describiendo lleva comentarios. A la hora de crear el cdigo en nuestro
Access debemos eliminar los comentarios. Si bien yo recomendara ir escribindolo para que
nuestras preciosas mentes se vayan empapando del mismo, para aquellos que son ms
perezosos decirles que junto a la BD de ejemplo vienen archivos .xml con el cdigo ya escrito.
Y por si alguien an tiene dudas esos archivos .xml se abren con el software que
comentbamos en el captulo 1, y en ltima instancia con el bloc de notas.
Dicho lo anterior vamos a por ello:
En primer lugar, nuestras ya conocidas (si hemos ledo el captulo 1, claro) tres primeras
lneas:
<customUI xmlns="http://schemas.microsoft.com/office/2006/01/customui">
<ribbon startFromScratch="true">
<tabs>

Si os fijis, la ltima es como si dijramos: voy a definir todas las pestaas de mi ribbon.
Sigamos. Las siguientes lneas son las que utilizamos para configurar los principales elementos
de nuestra cinta: la pestaa, el grupo, e informamos del estilo de nuestras cajas:
<!-- Identificamos nuestra pestaa -->
<tab id="misMenusId" label="Menu Neckkito">
<!-- Identificamos el grupo -->
<group id="miGrupoId" label="Operaciones sobre objetos">
<!-- Creamos el estilo de la caja de nuestros menus -->
<box id="miCajaId" boxStyle="horizontal">

Perfecto. Creemos nuestro primer men. En este men insertaremos un menuSeparator para
verlo en plena accin:
<!-- Creamos nuestro primer men -->
<menu id="menuFormsId" label="Formularios">
<!-- Creamos las opciones del men -->
<button id="abreFMenuId" label="Abrir FMenu" onAction="rbAbreFMenu"/>
<!-- Insertamos un separador entre esta opcin y la siguiente -->
<menuSeparator id="miSeparador1"/>
<!-- Insertamos nuestra segunda opcin de men -->
<button id="abreFDatosId" label="Abrir FDatos" onAction="rbAbreFDatos"/>
</menu>

Vistame en http://neckkito.siliconproject.com.ar

Con la estructura de este bloque clara ya podramos ir creando todos los mens que
necesitemos. No nos lo creemos? Pues como una imagen vale ms que mil palabras veamos
cmo construimos nuestro men para manipular la consulta:

<!-- Creamos nuestro segundo men -->


<menu id="menuQueryId" label="Consultas">
<button id="abreCDatosId" label="Abrir CDatos" onAction="rbAbreCDatos"/>
</menu>

Fcil, verdad?
Vamos a variar ligeramente la estructura anterior para poder crear un men con un submen
para manipular los informes. El cdigo sera:
<!-- Creamos nuestro tercer menu -->
<menu id="menuReportsId" label="Informes">
<!-- Creamos el submen -->
<menu id="subMenuInformesId" label="Abrir RDatos">
<!-- Establecemos las dos opciones del submen -->
<button id="subMenuInformes1Id" label="Vista informe" onAction="rbAbreRDatosReport"/>
<button id="subMenuInformes2Id" label="Vista preliminar" onAction="rbAbreRDatosPreview"/>
</menu>
<!-- Creamos una tercera opcin en el men principal de informes -->
<button id="imprimeRDatosId" label="Imprimir RDatos" onAction="rbImprimeRDatos"/>
</menu>

Bueno... Ya tenemos casi todo el trabajo hecho. Ahora slo queda eso de recoger
herramientas y partir... je, je...
Si recordamos lo dicho en el captulo 1, debemos ir cerrando nuestras marcas en orden inverso
a como las hemos ido abriendo; dicho a lo bruto, que es como si leyramos el cdigo desde
la mitad y de abajo a arriba y, segn lo que nos encontremos, lo vamos cerrando. Y si
hacemos eso deberamos cerrar nuestro cdigo de la siguiente manera:
</box>
</group>
</tab>
</tabs>
</ribbon>
</customUI>

Y listo.
Por si alguno de vosotros se ha perdido en algn punto podis ver todo el cdigo (sin
comentarios) en la siguiente ilustracin:

Vistame en http://neckkito.siliconproject.com.ar

PROGRAMANDO NUESTRO MDULO DE VBA


Como hemos visto, nuestros botones tienen un atributo que es onAction, y ah le hemos
asignado diferentes valores segn cada botn. Veamos cmo programarlos.
Vamos a crear un mdulo estndar y vamos a guardarlo con el nombre de mdlRibbon2.
Para nuestro ejemplo, la estructura de los procedimientos va a tener la siguiente estructura:
Sub nombreAccion(control As IribbonControl)
Sin embargo, y antes de hacer nada, es necesario realizar un paso importante para que todo
vaya sobre ruedas. Si vamos a trabajar con cdigo VBA sobre el ribbon es imprescindible
que registremos la librera Microsoft Office xx Objetc Library (donde xx representa la
versin de Office que tengamos instalada)3. Ojo!
Nuestra primera accin la hemos llamado rbAbreFMenu. As, vamos a crearnos en el mdulo
el siguiente procedimiento:

Sub rbAbreFMenu(control As IRibbonControl)


DoCmd.OpenForm "FMenu"
End Sub

Nuestra segunda opcin la hemos llamado rbAbreFDatos. El cdigo ser, pues:

Sub rbAbreFDatos(control As IRibbonControl)


DoCmd.OpenForm "FDatos"
End Sub

2
3

Para insertar un mdulo estndar podemos abrir el editor de VB (ALT+F11) y nos vamos a Men Insertar Mdulo
Para registrar una referencia debemos irnos, en el editor de VB, a Men Herramientas Referencias... Se nos abrir una
ventana mostrndonos todas las referencias disponibles. Buscamos la que nos interese, marcamos su check y aceptamos.

Vistame en http://neckkito.siliconproject.com.ar

Y esto debemos hacerlo sucesivamente con todas las acciones de los botones. Para nuestro
ejemplo los cdigos seran los siguientes:

Sub rbAbreCDatos(control As IRibbonControl)


DoCmd.OpenQuery "CDatos"
End Sub
Sub rbAbreRDatosReport(control As IRibbonControl)
DoCmd.OpenReport "RDatos", acViewReport
End Sub
Sub rbAbreRDatosPreview(control As IRibbonControl)
DoCmd.OpenReport "RDatos", acViewPreview
End Sub
Sub rbImprimeRDatos(control As IRibbonControl)
On Error Resume Next
DoCmd.OpenReport "RDatos"
End Sub

ULTIMANDO DETALLES
Aunque ya lo coment en el Captulo 1 de este manual, recordad que una vez tengamos el
cdigo XML programado debemos:

M Aadirlo a la tabla USysRibbons y darle un nombre.


M Decirle a Access que queremos que esa cinta nuestra debe ser la que queremos utilizar (ya
sea como cinta genrica o como cinta asociada a formulario o informe).

M Recordad que estableciendo el startFromScratch a true o a false conseguimos diferentes


propsitos. Os animo a que lo vayis cambiando en vuestra base de datos para que podis
apreciar mejor los efectos.

M Recordad que si modificamos, en Access, el cdigo XML es necesario reiniciar Access para
que este pille los cambios

M Recordad que cualquier error de escritura en el cdigo XML har que, precisamente, Access
no haga nada. Si es as revisad el cdigo. Por si os sirve de ayuda lo que a veces hago yo, si
no puedo encontrar el error, es el siguiente proceso:
Empezar por un cdigo pequeo (por ejemplo, slo el cdigo para nuestro men de
formularios) Funciona Aado el cdigo del men de consultas No funciona (=te
pill!) / S funciona Aado el cdigo para los informes.
Creo que ms o menos puede pillarse la idea de este sistema de depuracin casero J

NUESTRO EJEMPLO, PERO CON MACROS


Veamos qu debemos modificar de todo lo que hemos visto anteriormente para poder trabajar
con macros en lugar de cdigo VBA. Que nadie se asuste, puesto que las modificaciones en el
cdigo XML van a ser mnimas J
Sin embargo, vamos a cambiar el orden de la explicacin, y vamos a empezar, ya que tenemos
claras las acciones que debe realizar nuestro men de ribbon, por configurar la macro.
9

Vistame en http://neckkito.siliconproject.com.ar

As pues, veamos cmo podemos...

PROGRAMAR NUESTRA MACRO


La explicacin (y las ilustraciones) las voy a realizar sobre
un Access 2010, pero no deberamos tener problemas para
adaptarlos si utilizamos tanto versiones anteriores como
posteriores de Access.
Lo primero que haremos ser crearnos una macro
contenedora de macros. As pues, creamos una nueva
macro en vista diseo y la guardamos como mcrRibbon.
Ahora el trabajo consiste en crear submacros para cada opcin de nuestro men. Veamos
cmo configuramos la primera opcin, que era abrir FMenu.

Insertamos una submacro y le ponemos de nombre abrirFMenu


Agregamos una nueva accin (dentro de nuestra submacro), que ser Abrir
Formulario
Indicamos el nombre del formulario. El resto de opciones, a efectos de este ejemplo, no
importa rellenarlas.

Y nos debera haber quedado una cosa as:

El proceso es exactamente el mismo para el resto de acciones: insertamos una nueva


submacro y programamos sus acciones.
Las submacros que yo he insertado (cuyo nombre debemos conocer para poder adaptar el
cdigo XML) son:
abrirFDatos
abrirCDatos
abrirRDatosReport
abrirRDatosPreview
abrirRDatosPrint
Y por si quedara alguna duda os dejo aqu las ilustraciones de cada una de estas submacros:
10

Vistame en http://neckkito.siliconproject.com.ar

11

Vistame en http://neckkito.siliconproject.com.ar

PROGRAMANDO NUESTRO CDIGO XML


La nica modificacin que debemos realizar en nuestro
cdigo est en la asignacin del valor al atributo onAction,
donde debemos indicar en qu macro y submacro va a
encontrar la accin que debe realizar.
Eso
es
tan
simple
nombreMacro.nombreSubMacro.

como

escribir:

As, os indico aqu slo las lneas de cdigo que hay que
modificar para ello:
<button id="abreFMenuId" label="Abrir FMenu" onAction="mcrRibbon.abrirFMenu"/>
<button id="abreFDatosId" label="Abrir FDatos" onAction="mcrRibbon.abrirFDatos"/>
<button id="abreCDatosId" label="Abrir CDatos" onAction="mcrRibbon.abrirCDatos"/>
<button id="subMenuInformes1Id" label="Vista informe" onAction="mcrRibbon.abrirRDatosReport"/>
<button id="subMenuInformes2Id" label="Vista preliminar" onAction="mcrRibbon.abrirRDatosPreview"/>
<button id="imprimeRDatosId" label="Imprimir RDatos" onAction="mcrRibbon.abrirRDatosPrint"/>

Y listo!

PARA FINALIZAR EL EJEMPLO


Bueno... Espero que tras leer este captulo muchas de esas zonas oscuras que nos aparecan
al pensar en una cinta de opciones se haya iluminado (aunque sea slo un poquito... je, je...).
Espero que todo lo anterior os pueda ser til.
Un saludo, y...
suerte!

12

Vistame en http://neckkito.siliconproject.com.ar

También podría gustarte