Professional Documents
Culture Documents
CAPTULO 191
ndice de contenido
PERSONALIZAR LA CINTA DE OPCIONES .................................................................................2
INTRODUCCIN...........................................................................................................................2
CREANDO LA ESTRUCTURA DE NUESTRA BD.....................................................................3
LA CINTA DE OPCIONES. IDEAS GENERALES.......................................................................4
CDIGO XML...........................................................................................................................5
NUESTRA TABLA USysRibbons..............................................................................................5
LOS NOMBRES DE LA CINTA DE OPCIONES.....................................................................6
PLANIFICANDO NUESTRA CINTA DE OPCIONES.................................................................6
EL CDIGO XML INICIAL......................................................................................................7
PROGRAMACIN DE NUESTRA CINTA COMN..............................................................9
CMO ACTIVAR NUESTRA CINTA COMN?.............................................................12
PROGRAMACIN DE NUESTRA CINTA DE FORMULARIO..........................................13
CMO ACTIVAR NUESTRA CINTA DE FORMULARIO?...........................................14
PROGRAMANDO NUESTROS BOTONES CON VBA............................................................15
PREPARATIVOS PREVIOS....................................................................................................15
AHORA S, A POR EL CDIGO VBA...................................................................................15
UNAS LTIMAS LNEAS SOBRE LA CINTA DE OPCIONES...............................................17
PARA FINALIZAR EL CAPTULO.............................................................................................18
1
Vistame en http://neckkito.siliconproject.com.ar
PERSONALIZAR LA CINTA DE OPCIONES
INTRODUCCIN
Este captulo ser de aplicacin para usuarios de Access
2007 y 2010. Microsoft, a partir de Access 2007, ha
cambiado el sistema de mens que era tpico de Access
2003, y lo ha sustituido por la llamada cinta de opciones.
Ms cosas: para poder programar una cinta de opciones personalizada vamos a requerir de
unos mnimos conocimientos de XML (no os asustis: son realmente mnimos! ). Lo que
haremos (entre otras cosas) en general, en este captulo, ser:
i.- Aprovechar las funciones de los botones de los que ya dispone Access
ii.- Crearnos nuestros propios botones para que realicen las acciones que nosotros queramos
(y ah es donde entra en juego nuestra programacin en VBA).
Al final del captulo os indicar algunos enlaces que he considerado interesantes para que
podis profundizar en diferentes aspectos del ribbon de Access.
Visto el esquema genrico del captulo creo que la metodologa ms efectiva es seguir un
ejemplo y aprovecharlo para ir explicando las caractersticas de cada paso.
Por eso, si os parece bien, vamos a crearnos una BD muy simple (para no hacer este captulo
interminable) desde cero. Esta BD nos servir para gestionar las entradas/salidas en prstamo
de libros de una biblioteca.
2
Vistame en http://neckkito.siliconproject.com.ar
CREANDO LA ESTRUCTURA DE NUESTRA BD2
Crearemos una tabla, a la que llamaremos TPrestamos, con
la siguiente estructura:
Ahora nos creamos un formulario que nos har de men, y que llamaremos FMenu.
2 La estructura de nuestra BD ser mnima y no ptima, pues el objetivo del captulo no es aprender a estructurar una BD. Por ello,
no tomis esta referencia como lo que debera ser una BD bien estructurada (porque no lo es).
3
Vistame en http://neckkito.siliconproject.com.ar
El cdigo del botn cerrar (cmdCerrar) ser:
Y, en principio, eso es todo. Veamos cmo podemos construirnos nuestra cinta de opciones
personalizada para nuestra aplicacin.
4
Vistame en http://neckkito.siliconproject.com.ar
CDIGO XML
Para programar nuestra cinta de opciones deberemos
hacerlo utilizando cdigo XML. Y para ello vamos a necesitar
un editor de XML. Aunque eso puede hacerse en cualquier
editor de textos (el mismo bloc de notas nos servira) yo os
recomiento otros editores un poco ms especializados en
xml. Por ejemplo, el que utilizo yo es el notepad++, que
podris encontrar en la web portableapps (efectivamente,
como habis intuido, es un programa portable, por lo que
no requiere instalacin en nuestro disco duro).
De todas maneras insisto en que hay otros programas por esos mundos de Dios que os
pueden servir igualmente bien.
La tabla USysRibbons es detectada por Access como una tabla de sistema, aunque no de
Access (las tablas de sistema de Access llevan el prefijo MSys), sino de usuario. Cmo
podemos verlas? Pues de la siguiente manera:
Y por qu no construirnos nuestra tabla USysRibbons ahora? Pues creamos una tabla nueva, a
la cual, lgicamente, llamaremos USysRibbons, con la siguiente estructura:
5
Vistame en http://neckkito.siliconproject.com.ar
LOS NOMBRES DE LA CINTA DE OPCIONES
Veremos que existe una especie de jerarqua para llamar a
los diferentes elementos de una cinta de opciones.
Bsicamente, nos encontraremos con:
Y ahora es cuando aparece la gran pregunta: cmo se llaman los nombres de las cintas, de
los grupos y de los controles estndar? Es decir, a la cinta de opciones que ya existe, qu
nombres les ha puesto Microsoft?
Para ver todos estos nombres podis bajaros estos documentos, con los nombres
exclusivamente para Access3:
Si queris ver los nombres para todas las aplicaciones de Office podis visitar los siguientes
enlances:
Vamos a crearnos una cinta de opciones comn para todos los formularios
Vamos a crear una cinta especfica para el formulario FPrestamos
Vamos a crear una cinta especfica para el formulario FHistorial
3 Los archivos de este ejemplo y que os propongo para su descarga han sido bajados por m en junio 2012. Es decir, que,
tericamente (si Microsoft no nos engaa) estn actualizados a esa fecha.
6
Vistame en http://neckkito.siliconproject.com.ar
EL CDIGO XML INICIAL
Nuestro cdigo va a tener siempre unos elementos
comunes, que van a ser:
<customUI xmlns="http://schemas.microsoft.com/office/2006/01/customui">
A continuacin debemos operar con el atributo startFromScratch, que puede adoptar los
valores true o false (ntense las comillas, pues hay que utilizarlas). Si utilizamos false
estaremos indicando que estamos modificando la barra de herramientas estndar; si usamos
true es que creamos una desde cero.
<ribbon startFromScratch="false">
Aprovecho para haceros notar un detalle: cuando escribimos en XML utilizamos la notacin
camello: es decir, las pablabras se escriben juntas, empezando por minscula, pero la
primera letra de cada palabra entera (a partir de la segunda) se comienza en mayscula. As,
la letra U de la palabra customUI, por ejemplo, se escribe en mayscula, dando la
sensacin de que es la joroba de un camello. Si son ms palabras, como por ejemplo
startFromScratch, ya vemos claramente (espero) cmo funciona esta sistemtica.
<customUI...>
<ribbon startFromScratch="false">
<tabs>
<(elementos del tab y valores)>
<group (elementos del group y valores)>
<button (elementos del button y valores)/>
</group>
</tab>
</tabs>
</ribbon>
</customUI>
Si nos fijamos en el esquema anterior, los interdentados nos muestran el nivel jerrquico. Es
importantsimo cerrar siempre los elementos por orden inverso a su creacin. Es decir, que s
es correcto escribir:
<amo>
<esclavo>
</esclavo>
4 No puedo aqu explicar cmo funciona el lenguaje XML, lamentablemente. Por ello slo indicar las caractersticas que necesitemos
para nuestro ribbon.
7
Vistame en http://neckkito.siliconproject.com.ar
</amo>
<amo>
<esclavo>
</amo>
</esclavo>
<amo/>
Veris que he puesto (elementos del tab y valores). A continuacin os indico en una tabla lo
ms comn de estos elementos y valores para operar con la cinta:
8
Vistame en http://neckkito.siliconproject.com.ar
No se pueden ni aadir ni eliminar elementos de la cinta
estndar de Access. Lo mximo que podemos hacer es
llamar a algn elemento de esa cinta predeterminada y
situarlo como no visible.
El subelemento imageMso tambin puede hacer una llamada a una imagen que
hayamos diseado nosotros mismos para el botn.
Pronto vamos a ver un elemento ms (el nuestro), que llamaremos <Mis opciones>.
9
Vistame en http://neckkito.siliconproject.com.ar
Abrimos la tabla USysRibbons y escribimos, en el primer registro, lo siguiente:
<customUI xmlns="http://schemas.microsoft.com/office/2006/01/customui">
<ribbon startFromScratch="false">
<tabs>
<tab idMso="TabHomeAccess"
visible="false">
</tab>
<tab id="cintaComun"
label="Mis Opciones"
visible="true">
<group id="cintaComunGrupoAccess"
label="Opciones generales Access">
<control idMso="Copy"
label="Copiar datos"
enabled="true"/>
<control idMso="Paste"
label="Pegar datos"
enabled="true"/>
</group>
<group id="cintaComunGrupoMio"
label="Mis opciones personalizadas">
<button id="btnAbreFPrestamos"
imageMso = "FileServerTransferDatabase"
label="Prestar libro"
size="large"
enabled="true"
onAction="subAbreFPrestamos"/>
<button id="btnAbreHistorial"
imageMso = "DataRefreshAll"
label = "Ver historial"
size="large"
enabled = "true"
onAction="subAbreFHistorial"/>
</group>
</tab>
</tabs>
</ribbon>
</customUI>
Analicemos el cdigo:
<customUI xmlns="http://schemas.microsoft.com/office/2006/01/customui">
<ribbon startFromScratch="false">
<tabs>
<tab idMso="TabHomeAccess"
visible="false">
</tab>
10
Vistame en http://neckkito.siliconproject.com.ar
Como vemos, aqu debemos saber que la cinta Inicio se
llama TabHomeAccess (y para eso podemos recurrir al
fichero para el cual os apuntaba los enlaces ms arriba).
<tab idMso=NombreDeLaTab
visible = true>
<group idMso=NombreDelGrupoAOcultar
visible = false>
</group>
</tab>
<tab id="cintaComun"
label="Mis Opciones"
visible="true">
A partir de ah creamos los grupos. Como veis yo he creado dos grupos diferentes, para
que veais cmo manejar los controles de Access y los botones personalizados. As:
<group id="cintaComunGrupoAccess"
label="Opciones generales Access">
<control idMso="Copy"
label="Copiar datos"
enabled="true"/>
<control idMso="Paste"
label="Pegar datos"
enabled="true"/>
</group>
<group id="cintaComunGrupoMio"
label="Mis opciones personalizadas">
<button id="btnAbreFPrestamos"
imageMso = "FileServerTransferDatabase"
label="Prestar libro"
size="large"
enabled="true"
onAction="subAbreFPrestamos"/>
11
Vistame en http://neckkito.siliconproject.com.ar
<button id="btnAbreHistorial"
imageMso = "DataRefreshAll"
label = "Ver historial"
size="large"
enabled = "true"
onAction="subAbreFHistorial"/>
</group>
La mecnica es muy parecida al manejo de los controles de Access, slo que utilizando botones
(control versus button). A los botones les he asignado una imagen (la que me ha gustado
ms), recurriendo para ello al nombre que me mostraba el propio Access (tal y como os
explicaba ms arriba con el tema buscar los nombres en las opciones de Access). Los
mostraremos como botones grandes (en contraposicin a los controles) para que
podis ver el efecto en la aplicacin.
Para acabar completamos el cdigo con todas las etiquetas necesarias de cierre
</tab>
</tabs>
</ribbon>
</customUI>
El proceso es el siguiente:
1.- Ya tenemos nuestro cdigo en la tabla USysRibbons, pero Access an no sabe que hemos
creado una cinta personalizada. Qu hacemos?
2.- Una vez reiniciado ahora Access s ya sabe que existe una cinta de opciones nueva. Vamos
a configurarla:
12
Vistame en http://neckkito.siliconproject.com.ar
3.- Ahora Access ya sabe que tiene que mostrar nuestra cinta de opciones, pero an no ha
refrescado esa informacin. Pues...
Nota: si hay algn error de cdigo XML no aparecer nuestra cinta. Si os pasa eso no
queda otra que repasar bien el cdigo de la cinta hasta dar con el error. El rollo est en que
para cada modificacin tendremos que salir de Access y volver a entrar para ver si lo hemos
corregido correctamente.
13
Vistame en http://neckkito.siliconproject.com.ar
Siendo el cdigo XML
<customUI xmlns="http://schemas.microsoft.com/office/2006/01/customui">
<ribbon startFromScratch="false">
<tabs>
<tab id="cintaFPrestamos"
label="Men Prstamos"
visible="true">
<group id="toqueteoRegistros"
label="Trabajo con registros">
<control idMso="GoToNewRecord"
label="Nuevo prstamo"
enabled="true"/>
<control idMso="RecordsDeleteRecord"
label="Borrar entrada"
enabled="true"/>
</group>
<group id="operoConFormulario"
label="Opciones de formulario">
<button id="btnCierraFPrestamos"
imageMso = "CloseDocument"
label="Volver a Men"
size="large"
enabled="true"
onAction="subCierraFPrestamos"/>
<button id="btnAbreHistorial"
imageMso = "DataRefreshAll"
label = "Ver historial"
size="large"
enabled = "true"
onAction="subAbreFHistorialFiltrado"/>
</group>
</tab>
</tabs>
</ribbon>
</customUI>
Os dejo el anlisis del cdigo para vosotros, aunque no deberais tener problemas para
entenderlo. Slo hay que recordar que debemos programar dos funciones:
subCierraFPrestamos y subAbreFHistorialFiltrado.
14
Vistame en http://neckkito.siliconproject.com.ar
Y eso debera ser todo. Si situamos FPrestamos en vista Formulario nos debera aparecer
nuestra cinta. Al cerrar FPrestamos esa cinta debera desaparecer.
Aadir que podemos hacer lo mismo con un informe; es decir, programar una cinta
personalizada para un informe: slo deberamos ligarle la cinta correspondiente.
PREPARATIVOS PREVIOS
Debemos preparar nuestra BD para que nuestro cdigo VBA pueda interactuar con la cinta de
opciones. Ello implica realizar un paso previos a la programacin.
Ese paso consiste en registrar una referencia, dado que nuestro cdigo debe reconocer algunos
cdigos que llaman a la cinta de opciones. Para conseguir esto abrimos el VBE (ALT+F11) y nos
vamos a Men Herramientas Referencias..., y buscamos y marcamos el check de la
librera Microsoft Office 12.0 Object Library (la versin 14.0 para Access 2010).
Preparativo listo.
Vamos a crear pues una serie de procedimientos, pero debemos tener en cuenta que en todos
los procedimientos que programemos vamos a tener que seguir la siguiente estructura:
15
Vistame en http://neckkito.siliconproject.com.ar
De esta manera enlazamos la cinta con el cdigo que escribiremos.
subAbreFPrestamos
subAbreFHistorial
subCierraFPrestamos
subAbreFHistorialFiltrado
Lo que vamos a hacer es crearnos un mdulo estndar, que llamaremos mdlRibbons. Para la
primera funcin programaremos lo siguiente:
Como veis el cdigo no tiene mayor complicacin, salvo por la particularidad que
comprobamos, antes de realizar la accin, si FPrestamos est cargado o no, y actuamos en
consecuencia.
16
Vistame en http://neckkito.siliconproject.com.ar
Exit Sub
sol_err:
MsgBox "Se ha producido el error " & Err.Number _
& " - " & Err.Description
Resume Salida
End Sub
Slo me queda aadir que, aunque yo no lo he hecho ms que en los cdigos de la cinta
comn (porque los cdigos programados son muy simples), es buena costumbre aadir un
control de errores en los cdigos (sobre todo si la cinta de opcines es comn y no est ligada a
ningn formulario). Si los usuarios manazas ya dan problemas con un objeto normal de
Access, si le aadimos un men las consecuencias pueden ser insospechadas... je, je...
http://office.microsoft.com/es-es/access-help/personalizar-la-cinta-de-opciones-
HA010211415.aspx (cmo crear un ribbon)
http://76areal.wordpress.com/2011/05/10/menus-y-botones-para-access-2007-y-2010/
(ofrece varias opciones adicionales de cmo configurar el men de las aqu explicadas)
http://geeks.ms/blogs/access/archive/2008/04/06/access-2007-cambiar-de-banda-de-
opciones-ribbon-usando-vba.aspx (con cosas curiosas sobre el ribbon que pueden sernos tiles
para nuestra aplicacin)
17
Vistame en http://neckkito.siliconproject.com.ar
http://geeks.ms/blogs/access/archive/2009/01/14/el-uso-de-las-cintas-de-opciones-ribbon-y-
xml-lenguaje-de-marcado-extensible-ribbonandxml-01.aspx (para ocultar iconos del men del
botn de Office)
Un saludo, y...
suerte!
18
Vistame en http://neckkito.siliconproject.com.ar