Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Índice de contenido
“MACROMÍZAME”............................................................................................................................2
TIPOS DE MACROS...........................................................................................................................2
INCRUSTEMOS UNA MACRO INCRUSTADA: FASE 1................................................................3
INCRUSTEMOS UNA MACRO INCRUSTADA: FASE 2................................................................4
DESNUDANDO LAS ACCIONES DE MACRO...............................................................................4
LAS MACROS “NORMALES”… LAS DE TODA LA VIDA, VAMOS...........................................5
A) SISTEMA TRADICIONAL.......................................................................................................5
B) SISTEMA A TRAVÉS DE MACRO INCRUSTADA................................................................6
TE “MACROMIZO” CON UNA CONDICIÓN….............................................................................6
Y TE CONTROLO Y AVISO CON UNA CONDICIÓN....................................................................8
CREEMOS UN GRUPO PARA UN “MACRO” CONCIERTO.........................................................9
DOS MACROS CURIOSAS..............................................................................................................11
1) AUTOEXEC..............................................................................................................................11
2) AUTOKEYS..............................................................................................................................11
¿MI MACRO EN VBA?....................................................................................................................11
¿MACROS O VBA?..........................................................................................................................12
1
Visítame en http://bit.ly/NckAccess
“MACROMÍZAME”
Vamos a iniciar un nuevo artículo sobre este objeto tan
interesante como son las macros. La primera pregunta que
nos podemos plantear es: “¿Qué es una macro”. Y la
respuesta inicial podría ser “es un proceso asignado a un
evento de un control u objeto de Access que realiza una o
varias operaciones de carácter automático”. ¿A que ha
quedado bien esta definición? Je, je…
A mí me gusta pensar, utilizando un símil, que las macros son como “el servicio” de una casa
señorial de siglos atrás: tenemos el mayordomo, el asistente de cámara, la cocinera, la
limpiadora, el chófer (no es que quiera ser sexista, pero siglos atrás lo de la “igualdad de
género” no estaba de moda), etc.
Que quiero que preparen la comida, pues llamo a la cocinera. Que quiero que me lleven al
pueblo de al lado, pues llamo al chófer. Que quiero que se me abra un formulario, pues llamo a
la macro que abre un formulario…
Quizá los que sepáis ya qué es y que hace una macro podéis considerar este símil un poco
“tonto”, pero para quien no sepa qué es una macro creo que se ha podido formar una buena
idea de lo que representa una macro.
Pues lo dicho. Vamos a ver algunas cosillas a través de un poco de teoría y un ejemplo. La
base de datos que desarrolla este ejemplo os la podéis bajar aquí.
Todo lo explicado en este artículo está basado en el sistema de macros de Access 2007.
Exceptuando el tema de las macros incrustadas, el resto de explicación es de perfecta
aplicación para Access 2003. El diseño de macros en Access 2010 ha cambiado un poco
respecto del que se explicará aquí, pero, mutatis mutandi (y con un poco de imaginación por
nuestra parte) también se puede aplicar sin demasiados problemas.
TIPOS DE MACROS
Hasta Access 2003 había un solo tipo de macro, a la que, para distinguirla del otro tipo,
llamaré “normal” a partir de ahora. Esta macro “normal” consistía en definir una serie de
operaciones (o una sola) para automatizar procesos. Hablaremos un poco más adelante con
detalle de estas macros. A estas macros les asignábamos un nombre descriptivo y quedaban
guardadas como objetos en nuestra BD. Con posterioridad íbamos a algún evento, por
ejemplo, de un botón, y “Al hacer click” seleccionábamos la macro que acabábamos de crear.
Desde Access 2007 existe otro tipo de macros, que se denominan “macros incrustadas”. El
proceso para crearlas, a grandes rasgos, es muy simple: creamos el control, por ejemplo, un
botón de comando; seleccionamos un evento y generamos una macro; definimos la operación
u operaciones que debe realizar la macro y… listo.
2
Visítame en http://bit.ly/NckAccess
¿Qué sistema es mejor? Como siempre, “nada es verdad ni es
mentira: todo depende del color del cristal con que se mira”. Lo
que sí puedo hacer es resumiros un par de detalles que harán que
un sistema sea mejor o peor para vuestras BD’s:
- Si tenemos una operación que sea “común” (por ejemplo, abrir siempre la misma consulta) y
que pueda ser ejecutada, por ejemplo, desde varios formularios, lógicamente sólo deberemos
crear una sola macro “normal” y asignarla a los eventos de los diferentes controles; si
queremos una macro incrustada deberemos crearla cada vez en cada control.
- Las macros “normales” pueden convertirse en código VBA, mientras que las incrustadas no.
Si queremos hacer nuestros “pinitos” con programación que una macro pueda convertirse en
código es algo muy útil (como mínimo, para ver cómo quedaría el código de una acción).
A lo largo de este artículo, con lo que expliquemos, podremos ver, por “intuición”, otros
pequeños detalles que nos ayudarán a elegir la mejor tipología de macro para nuestras
aplicaciones.
Ni que decir tiene que, en una misma BD, podemos utilizar simultáneamente ambos sistemas.
No sólo se puede sino que, según lo que queramos hacer, es altamente recomendable.
1.- Abrimos nuestro formulario FMenu en vista diseño e insertamos un botón de comando.
Sacamos sus propiedades y nos vamos a la pestaña Eventos->Al hacer click. Pulsamos sobre
el botón de puntos suspensivos y, en la pantalla que nos aparece, le decimos que queremos
3
Visítame en http://bit.ly/NckAccess
generar macros.
2.- Se nos abrirá la pantalla con las herramientas de macro.
Podemos observar, en dicha pantalla, dos zonas
diferenciadas: la mitad superior, donde podremos
especificar la acción o acciones a realizar por la macro, con
sus argumentos y comentarios, y la mitad inferior, donde
podremos manipular los argumentos de la acción.
3.- En nuestro caso, seleccionamos la acción: Abrir
formulario. Ahora debemos configurar los argumentos, de
manera que lo hacemos así:
Cerramos la macro a través del botón “Cerrar” que podemos ver en la cinta de opciones, y
guardamos los cambios.
Ahora podemos, con FMenu en vista Formulario, probar nuestro botón, a ver qué pasa.
3.- Ahora añadimos una línea de Acción más. La acción que debemos seleccionar es:
IrARegistro. Los argumentos de la acción serán los siguientes:
Vamos a hacer aquí una breve descripción de las acciones más usuales que pueden realizar las
macros, e intentaré poner la misma acción equivalente en código (es decir, cómo se iniciaría el
código VBA sin entrar en más detalles). Vamos allá:
- Abrir xxx: como ya hemos visto, con estas acciones podemos abrir formularios,
consultas, informes… En código esto sería DoCmd.Open…
4
Visítame en http://bit.ly/NckAccess
- Buscar registro: el código sería DoCdm.FindRecord…
- Cerrar: nos permite cerrar objetos. El código sería DoCmd.Close…
- Salida hacia: nos permite exportar diversos objetos de Access en el formato que
especifiquemos (y que sea posible, claro). El código sería DoCmd.OutputTo…
- Salir: salimos de la base de datos. El código sería DoCmd.Quit
1.-Añadimos al grid de la consulta todos los campos de la tabla (arrastrando el asterisco que
hay sobre el campo [Id]).
2.- Ahora añadimos en una columna vacía la siguiente expresión (en la primera línea, la de
más arriba, que corresponde a “Campo”):
AñoNac: Year([FNacimiento])
3.- Le desmarcamos el check “Mostrar”
A) SISTEMA TRADICIONAL
1.- Nos vamos al menú Crear->Grupo de opciones “Otros”->Botón Macro. Hacemos click sobre
él.
5
Visítame en http://bit.ly/NckAccess
2.- Nos aparece nuestra conocida ya pantalla para crear macros.
3.- En Acciones buscamos la acción “Abrir consulta”
8.- Ahí veremos que nos aparece nuestra macro recién creada. La seleccionamos. Ahora ya
podemos probar el funcionamiento de nuestro botón.
4.- Se nos abre nuestra vieja amiga pantalla de macros. Como en el caso anterior,
seleccionamos la Acción “Abrir consulta” y en los argumentos le decimos que la consulta es
CTrabajadorAñoNac
5.- En la cinta de opciones de macro->Grupo Cerrar, pulsamos el botón “Guardar como…”.
6.- Se nos abre una ventana de diálogo. Ahí le decimos que queremos guardar con el nombre
MTrabajadorAñoNac2 como macro
6
Visítame en http://bit.ly/NckAccess
1.- En el formulario FMenu en vista diseño añadimos un
cuadro combinado. Cuando nos salga el asistente le
decimos que queremos seleccionar de la tabla
TTrabajadores los campos [Nombre] y [Apellidos].
Acabamos de configurar el asistente a nuestro gusto.
2.- Sacamos las propiedades de ese combo y en la pestaña
Otras->Nombre, le ponemos de nombre cboNomTrab
OK. Ya tenemos nuestro precioso combo. Ahora sí vamos a
trabajar sobre la macro. La idea es que tras seleccionar el
nombre del trabajador nos abra su ficha en sólo lectura
(para no poder modificar los datos). Sin embargo, debemos
asegurarnos de que hay un valor en el combo para evitar
que si borramos el valor del combo, y este queda vacío no
nos presente cada vez un formulario en blanco.
Manos a la obra:
1.- Sacamos las propiedades del combo y nos vamos a la pestaña Eventos->Después de
actualizar…
2.- Como ya sabemos, le decimos que queremos generar macro.
3.- Ahora, en la cinta de opciones, nos vamos al botón “Condiciones” que está en el grupo
“Mostrar u ocultar”. Veremos que se nos añade una primera columna “Condición” a nuestro
generador de macros.
4.- En la primera línea de “Condición” vamos a escribir lo siguiente:
7
Visítame en http://bit.ly/NckAccess
nos interesa porque es el valor que contiene nuestro combo. Cogemos pues ese campo:
[Id] =
Nota: si nuestros nombres contienen espacios, por ejemplo, si el formulario se llamara “Menu
Principal” y si el combo se llamara “Combo NomTrab”, deberíamos escribir ese nombre entre
corchetes, por lo que la expresión WHERE nos debería quedar así:
[Id] = Forms![Menu Principal].[Combo NomTrab].Value
(por eso suelo escribir los nombres sin espacios, para escribir menos… je, je…)
Vamos a controlar que el usuario introduzca un valor correcto para seleccionar un año de
nacimiento. Para ello debemos hacer un par de “gestiones” antes de machacar la macro.
1.- En nuestro FMenu insertamos un cuadro de texto, para introducir el año de nacimiento que
queremos filtrar. Una vez tengamos ese cuadro de texto sacamos sus propiedades->Pestaña
Otras->Nombre, y le llamamos txtFNac. Como etiqueta a ese cuadro de texto podemos escribir
“Nacidos después del año:”
>=Forms!FMenu.txtFNac.Value
Y, como veis, acabamos de aplicar lo que hemos aprendido en el apartado anterior, pero a una
consulta. ¿Fácil, no?
4.- De nuevo en nuestro FMenu, al lado de nuestro nuevo cuadro de texto, añadimos un botón
de comando, que nos permitirá ejecutar la consulta.
Bueno, bueno… Vamos a por la macro:
8
Visítame en http://bit.ly/NckAccess
2.- Mostramos la columna de condiciones
3.- Primero, vamos a comprobar que el usuario haya escrito
un valor en el cuadro de texto. Pero como queremos lanzar
un mensaje de advertencia, escribimos lo siguiente en
“Condición”:
EsNulo([txtFNac].[Valor])
Ahora vamos a controlar las salvajadas que pueda hacer el usuario (que no son pocas).
Evitaremos que el usuario “graciosito” meta una fecha ilógica. Vamos a añadir una tercera
línea y haremos lo siguiente:
6.- En condiciones escribimos lo siguiente:
[txtFNac].[Valor]<1900 O [txtFNac].[Valor]>2000
7.- En Acciones elegimos la acción “CancelarEvento”
8.- Añadimos una cuarta línea y escribimos, en condiciones, puntos suspensivos (es decir,
escribimos tres puntos: …)
- Tipo: Aviso!
- Título: AÑO INCORRECTO
10.- Añadimos una línea más. En condiciones escribimos la misma condición que en el punto 6
y en Acciones seleccionamos “DetenerMacro”
11.- Dejamos el campo condición en blanco. En Acciones elegimos la acción “Abrir consulta”, y
configuramos sus argumentos así:
9
Visítame en http://bit.ly/NckAccess
preparar el terreno para poder explicar este apartado.
1.- Creamos un formulario en blanco, y lo llamamos FPanel
Ahora vamos a dejar unas cuantas líneas en blanco. Por ejemplo, yo he dejado dos líneas en
blanco. Esto es por comodidad “visual”, para ver que estamos tratando una macro de grupo y
no una macro “normal” (aunque sea incrustada).
5.- Creamos una nueva línea (la que sería la cuarta contando desde arriba) y, en nombre de
macro, le escribimos F02.
6.- Como acción seleccionamos “Abrir formulario”, y en los argumentos abrimos el formulario
F02.
7.- Cerramos la macro y, al pedirnos un nombre, la llamamos MGrupoPanel
Ya tenemos nuestro grupo de macro configurado. Debemos saber pues que para llamar a una
acción de ese grupo lo debemos indicar con la siguiente sintaxis:
NombreGrupo.nombreMacro
Vamos a acabar de configurar los cambios:
8.- Abrimos FPanel en vista diseño y nos situamos sobre el primer botón. Sacamos sus
propiedades y nos vamos a la pestaña Eventos->Al hacer click.
9.- Si “desplegamos” para ver las posibilidades que tenemos veremos que nos han aparecido
tres nuevas macros, que son:
- MGrupoPanel
- MGrupoPanel.F01
- MGrupoPanel.F02
10.- Como la que nos interesa es MGrupoPanel.F01 esta es la que seleccionamos.
10
Visítame en http://bit.ly/NckAccess
DOS MACROS CURIOSAS
Vamos a explicar dos macros que, desde mi punto de vista,
pueden ser muy interesantes para nuestra aplicación.
Veamos:
1) AUTOEXEC
La palabra Autoexec es una palabra reservada en Access.
Eso significa que si creamos una macro y le ponemos de
nombre Autoexec Access entenderá que esa macro debe
ejecutarse en el momento en que abrimos la BD. Vamos a
ver cómo crear una a través de un ejemplo:
1.- Nos vamos a Menu->Crear->Macro
- Título: WELLCOME
3.- Guardamos la macro con el nombre de Autoexec
4.- Si ahora cerramos y volvemos a abrir la BD veremos los “efectos” de nuestros toqueteos.
2) AUTOKEYS
Puede ser que necesitemos que, al pulsar alguna tecla de función (las Fx de, normalmente, la
primera fila superior del teclado). Eso lo podemos conseguir a través de la macro Autokeys.
Veamos un ejemplo. Queremos conseguir que al pulsar F2 se abra el formulario FPanel, y que
al pulsar F3 se abra el formulario FTrabajadores:
1.- Nos vamos a Menu->Crear->Macro
2.- Convertimos esa macro en un grupo de macros a través del botón “Nombres de macro.
3.- Como primer nombre de macro escribimos lo siguiente:
{F2}
4.- Como acción seleccionamos la acción “AbrirFormulario” y, en argumentos, seleccionamos el
formulario FPanel
5.- Añadimos una segunda línea (inmediatamente debajo de la primera) y escribimos, como
nombre de macro:
{F3}
11
Visítame en http://bit.ly/NckAccess
las macros “normales”. Es decir, que lo que vamos a hacer ahora es “pasar” las acciones de la
macro a Visual Basic.
1.- Utilizaremos la macro que ya tenemos y que hemos llamado MTrabajadorAñoNac1. Para
pasarla a VBA la seleccionamos con un click esa macro en el panel de exploración, de manera
que nos quede resaltada.
2.- Nos vamos a menú->Herramientas de la Base de Datos. El primer botón de la izquierda, de
la cinta de opciones, es “Visual Basic”. A su derecha hay tres pequeños botones. Debemos
seleccionar el botoncillo de más abajo (si dejamos el puntero del mouse sobre él nos saldrá un
mensaje emergente que nos indica “Convertir macros a Visual Basic”).
3.- Nos sale una ventana que nos indica dos opciones. Estas opciones, con su descripción,
están bastante claras. Dejamos los dos check marcados y pulsamos “Convertir”
4.- Se nos abrirá el editor de VB (VBE). En la ventana proyecto veremos, dentro de la carpeta
Módulos, un nuevo módulo que pone “Macro convertida-...”.
5.- Si hacemos doble click sobre ese módulo veremos cómo es nuestra macro en código VBA.
¿MACROS O VBA?
Si me permitís voy a filosofar (muy brevemente) sobre qué es mejor, si utilizar macros o
utilizar código.
Quizá para alguien que aprenda VBA lo ideal sería utilizar una mezcla de ambos sistemas, de
manera que programar las macros le sirva de base para aprender cosas nuevas de código (tal
y como comentábamos en el truco del apartado anterior).
Cuando ya se controla medianamente bien VBA la verdad es que las macros suelen quedar en
el olvido.
Personalmente yo siempre utilizo código, a no ser que deba programar alguna aplicación muy
muy simple, en cuyo caso, para no “complicarme” la existencia, utilizo las macros.
En definitiva, que parece que la respuesta viene dada por la “evolución” de nuestros
conocimientos en relación a VBA.
12
Visítame en http://bit.ly/NckAccess
Finalmente, si queréis saber lo que opina el gran “profesional” Microsoft, podéis echarle un
vistazo a esta página:
http://office.microsoft.com/es-mx/access-
help/introduccion-a-la-programacion-en-access-
HA001214213.aspx?CTT=1#BMwhenusewhat
Espero que hayáis podido sacar alguna cosa útil de este
artículo.
¡Suerte!
13
Visítame en http://bit.ly/NckAccess