Trabajar con macros y expresiones de Access 2010

Office 2010

Resumen:  Microsoft Access 2010 presenta una nueva característica conocida como macros de datos que permite escribir macros adjuntas a tablas. El Diseñador de macros también se mejoró. Obtenga más información sobre estas opciones y explore los ejemplos de código asociado.

Última modificación: lunes, 27 de abril de 2015

Hace referencia a: Access 2010 | Office 2010

Applies to:  Microsoft Access 2010

Publicado:  noviembre de 2010

Contenido

Introducción

A la mayoría de los desarrolladores de Microsoft Access 2010 no les gusta escribir macros. Las macros, excepto en determinadas circunstancias (como crear teclas automáticas y la macro AutoExec), son vistas como elementos de segunda en el mundo de la extensibilidad de aplicaciones. Son un paso previo de los usuarios de Microsoft Access antes de pasar a la programación con Microsoft Visual Basic for Applications (VBA). Mientras las acciones que se usan en la escritura de macros (derivadas del objeto DoCmd) corresponden a los métodos que se usan en VBA, la interfaz del diseñador de macros pierde su esplendor cuando se la compara con la rica experiencia que se tiene con el Editor de Visual Basic.

Con el lanzamiento de Access 2010, hay varias características nuevas de diseño y uso de macros que van a agradar tanto al desarrollador como al usuario. Entre ellas, un diseñador de macros mejorado, macros de datos basadas en tablas y cambios en la forma de crear expresiones. El diseñador de macros mejorado ayuda a crear macros que son más flexibles y fáciles de leer y seguir. Ahora se pueden adjuntar macros a tablas para que los objetos que se creen a partir de esa tabla hereden la macro. El generador de expresiones ahora cuenta con IntelliSense para facilitar la creación de expresiones.

Este artículo describe el nuevo diseñador de macros. También se mostrará cómo crear macros de datos con el diseñador de macros. Por último, describe algunos cambios en el generador de expresiones.

Diseñador de macros

Access 2010 tiene un nuevo diseñador de macros que facilita crear macros complejas a la vez que reduce los errores de codificación. Use el diseñador para hacer esto con listas desplegables, IntelliSense, reutilización de macros, funcionalidad de arrastrar y soltar y acciones de copiar/pegar.

A los desarrolladores también les agradará la interfaz de usuario mejorada, que ayuda con la con construcción de bloques condicionales para permitir un flujo lógico de acciones sin obstáculos. También es fácil compartir macros por correo electrónico, páginas web, blogs o grupos de noticias.

Si alguna vez creó macros en versiones anteriores de Microsoft Access, está familiarizado con el generador de macros de tres columnas (consulte la figura 1). Las instrucciones condicionales se agregaban en la columna Condición, las acciones de macro en la columna Acción y se especificaban los parámetros en la columna Argumentos.

Figura 1. La versión heredada del creador de macros

Versión heredada del creador de macros

En el nuevo diseñador de macros de Access 2010, el diseño se parece más a un editor de texto. Las tres columnas no existen más. En su lugar, hay acciones e instrucciones condicionales que se muestran en un formato familiar de arriba a abajo que usan los programadores. Los argumentos se muestran en línea en un cuadro de diálogo, como se muestra en la figura 2.

Figura 2. Diseñador de macros

Diseñador de macros

Agregar una nueva acción o instrucción condicional es sencillo. Selecciónela de la lista desplegable de acciones, en un menú contextual, o desde el panel Catálogo de acciones (que se muestra en la figura 3) a la derecha del diseñador de macros.

Figura 3. Catálogo de acciones

Catálogo de acciones

Puede hacer doble clic en la acción o arrastrarla y soltarla en el diseñador de macros. De forma predeterminada, el Catálogo de acciones y el cuadro combinado Agregar nueva acción muestran acciones que se ejecutan en bases de datos que no son de confianza. Para ver todas las acciones, haga clic en el comando Mostrar todas las acciones en la cinta de opciones (figura 4).

Figura 4. Comando Mostrar todas las acciones en la cinta de opciones

Comando Mostrar todas las acciones de la cinta de opciones

Puede contraer algunos o todos los bloques de código si hace clic en los expansores ubicados en el lado izquierdo del bloque de código. También puede contraer o expandir bloques de código con los controles expandir o contraer en el grupo Expandir/Contraer de la cinta de opciones. La figura 5 muestra una versión contraída de la macro que se muestra en la figura 2.

Figura 5. Bloques de código contraídos

Bloques de código contraídos

El cuadro de búsqueda Catálogo de acciones cuenta con una funcionalidad de búsqueda que permite escribir un término para aplicar un filtro y mostrar los elementos que coincidan con ese término en Microsoft Access. El cuadro de búsqueda Catálogo de acciones no solo examina el nombre de la acción, sino que también incluye su descripción. Por ejemplo, busque Consulta. Los resultados de búsqueda no solo van a mostrar acciones con la palabra Consulta, sino también ApplyFilter, GoToRecord y ShowAllRecords que incluyan Consulta en la descripción.

También puede agregar comentarios a macros si escribe // en un cuadro desplegable Agregar nueva acción o si arrastra el nodo Comentarios al catálogo de acciones. Los comentarios aparecen como texto verde, como se muestra en la figura 2. Esto garantiza que los comentarios sean fáciles de encontrar y se puedan usar para separar secciones en un procedimiento. Reorganizar el código de una macro también es fácil. Arrastre y suelte bloques de código a la nueva ubicación o use las flechas verdes arriba y abajo (consulte la figura 5) en los bloques dentro del panel de acciones.

El diseñador de macros presenta una nueva construcción de flujo de programa que se llama bloques de grupo. Los grupos de bloque facilitan poner varias macros en un grupo que se expande o contrae como una unidad para legibilidad.

En el generador de macros de versiones anteriores de Microsoft Access, podía crear instrucciones condicionales simples con la columna Condición. En el diseñador de macros de Access 2010, puede crear instrucciones If más versátiles si agrega las instrucciones ElseIf y Else. Para agregar estas instrucciones, seleccione el bloque If y, a continuación, haga clic en el texto ElseIf o Else en el lado inferior derecho del bloque de código. Por ejemplo, haga clic en el texto ElseIf y aparece un cuadro de diálogo ElseIf. Después, mientras escribe en el cuadro de condición, Microsoft Access usa IntelliSense para mostrar identificadores, funciones y otros elementos de la base de datos.

El diseñador de macros, junto con IntelliSense, también proporciona varios tipos de ayuda. Estas incluyen las siguientes:

  • Autocompletar muestra una lista desplegable de palabras que coinciden con un objeto, función o parámetro después de que haya escrito suficientes caracteres para identificar el término. Puede aceptar la sugerencia con ENTRAR o TAB o continuar escribiendo el nombre.

  • Información rápida muestra la sintaxis correcta para cualquier identificador de la macro o expresión. Coloque el mouse de forma tal que el puntero quede ubicado sobre el identificador y se mostrará la información de declaración en el cuadro de diálogo.

  • Sugerencias rápidas proporciona información adicional sobre el componente de interfaz de usuario cuando se selecciona un valor con Autocompletar.

A pesar de todas las mejoras al diseñador de macros, muchos desarrolladores aún querrán convertir macros a código de VBA. Puede hacerlo con el comando Convertir macro a Visual Basic de la cinta de opciones.

En la siguiente sección, creará una macro de datos con el diseñador de macros.

Crear macros de datos

Las macros de datos son una nueva característica de Access 2010. Las macros de datos permiten adjuntar lógica a registros y tablas (semejante a los desencadenadores de SQL Server). Es decir, escribe la lógica en un lugar y todos los formularios y códigos que agregue, actualice o elimine en una tabla heredan esa lógica. Las macros de datos permiten varios escenarios:

  • verificar el valor de un campo antes de permitir que se agregue otro registro

  • mantener un historial de los cambios realizados a un registro

  • generar un correo electrónico cuando cambia el valor de un campo

  • verificar la exactitud de los datos de una tabla

Las macros heredadas (desde ahora llamadas macros) aún existen aunque solo se pueden llamar desde un evento de formulario, otra macro, un evento de informe o código de VBA.

Existen dos tipos generales de macros de datos: macros de "eventos" que se desencadenan cuando ocurre alguna acción en los datos de una tabla y macros independientes "con nombre" que se ejecutan cuando son llamadas por el nombre. Puede programar una macro de datos para que se ejecute inmediatamente después de agregar, actualizar o eliminar eventos de datos o inmediatamente antes de un evento de eliminación o cambio.

Las macros de datos pueden devolver valores a macros con ReturnVars. ReturnVars en las macros de datos se parece a los valores devueltos por las llamadas de función/método de VBA u otros lenguajes de programación. Esto hace posible mostrar la interfaz de usuario en la macro que se llama, basado en lo que pasa en la macro de datos. En la macro de datos se especifica el ReturnVars con el comando SetReturnVar, como se muestra en la figura 6. Estos valores se establecen en las macros de datos con nombre.

Figura 6. SetReturnVar devuelve valores a macros

SetReturnVar devuelve valores a las macros

Para hacer referencia a una variable en una macro, use el comando ReturnVars que se ve en la instrucción siguiente.

=[ReturnVars]![retrunVar1]
NotaNota

La lógica de la macro de datos solamente funciona con tablas locales, no con tablas vinculadas, aunque puede solucionar esto cuando usa Access front-end y Access back-in al agregar macros de datos a la tabla original.

Las macros de datos son útiles porque reducen la confusión en las bases de datos al reducir la necesidad de adjuntar la misma macro a una serie de formularios. Al agregar la lógica a la tabla, cualquier formulario que se crea a partir de esa tabla hereda la lógica. También puede garantizar la integridad de los datos mediante el uso de macros de datos. Supongamos que se desencadena un evento en un formulario vinculado a la tabla sin una macro de datos. Si el usuario tiene acceso a sus tablas o puede ejecutar consultas, puede eludir el formulario y burlar así su lógica. Puede restringir el acceso a las tablas e impedir la ejecución de consultas, pero no puede hacerlo en todas las circunstancias. Al agregar la lógica directamente a la tabla, se desencadena la acción incluso si el usuario realiza el cambio fuera del formulario.

Las macros de datos admiten la lista de eventos en la tabla 1.

Tabla 1. Lista de eventos

Eventos

Usos

BeforeChange

Usted desea:

  • desencadenar un mensaje de error y bloquear el cambio

  • comparar el nuevo valor al nuevo valor y abrir otro formulario

BeforeDelete

Usted desea:

  • desencadenar un mensaje de error y detener la eliminación

  • mostrar un formulario de pedido para pedir nuevamente el ítem

AfterUpdate, AfterInsert, AfterDelete

Usted desea:

  • generar un correo electrónico

  • recorrer un conjunto de registros y actualizar su estado

Para crear una macro de datos de evento, primero, en el panel de navegación izquierdo, haga doble clic en el nombre de la tabla a la cual desea adjuntar la macro. En la pestaña Tabla, en el grupo Eventos previos o en el grupo Eventos posteriores, haga clic en el evento al cual le desea agregar la macro. Microsoft Access muestra el generador de macros. Si usted ya creó la macro para este evento, el generador de macros abre esa macro.

Para crear una macro con nombre, en el panel de navegación izquierdo, haga doble clic en el nombre de la tabla a la cual desea adjuntar la macro. En la pestaña Tabla, en el grupo Macros con nombre, haga clic en Macro con nombre y, a continuación, haga clic en Crear macro con nombre. Microsoft Access muestra el generador de macros.

Considere el ejemplo siguiente. Supongamos que tiene un sistema de pedidos que supervisa los niveles de mercancía del inventario. En este sistema, cuando el número de artículos disponibles cae por debajo de determinados niveles, desea alertar al personal de que los niveles son bajos o que es necesario pedir más mercancía. Para ello, cree una macro de datos en la tabla de artículos. De este modo, cuando se cree un formulario que se basa en esa tabla, toda la lógica que debe tener ya está disponible.

Para crear una macro de datos, cree una tabla de ejemplo con el nombre Artículos con los siguientes campos.

Tabla 2. Datos de ejemplo

Nombre

Tipo

Artículo

Texto

Cantidad

Número (entero largo)

Estado

Texto

Guarde la tabla y agregue los siguientes datos a la columna Artículo y deje las demás columnas vacías.

Tabla 3. Agregar estos datos a la tabla

Café

Refresco

Agua

Para agregar la macro, seleccione la tabla y en Herramientas de tabla en la pestaña Campos, haga clic en la lista desplegable Vistas y, a continuación, haga clic en Vista Hoja de datos. Con la tabla en la vista hoja de datos, en Herramientas de tabla, haga clic en la pestaña Tabla y, a continuación, haga clic en el botón de eventos Antes de cambiar. ¿Por qué usar el evento Before Change en vez del After Change? Como regla general, es mejor usar el evento Before Change para modificar y ejecutar código adicional antes que permitir que la tabla actualice el registro, y LUEGO crear modificaciones adicionales al mismo registro que se guardó en la tabla. El desencadenador de la tabla de eventos After Change es mejor para los totales de agregados y para guardar esos valores en otras tablas. Por ejemplo, mantener totales de inventario cuando el valor de una cantidad se cambia. En estos tipos de escenarios, generalmente se está modificando una tabla diferente.

A continuación cree la instrucción If...Then...Else que se desencadena cada vez que realice un cambio en la tabla. En la pestaña Artículos: antes de cambiar, haga clic en la lista desplegable y, a continuación, haga clic en If. Para agregar la condición a la instrucción If, escriba I después de la instrucción If. Tenga en cuenta que tiene IntelliSense. Seleccione la tabla Artículos. Después del identificador [Artículos] escriba un punto y seleccione Cantidad. Después de Cantidad, escriba Entre 50 y 100. Esto establece la condición donde si la cantidad de artículos cae entre 100 y 50, se desencadena esa parte de la instrucción If.

En el lado derecho de la pantalla, el catálogo de acciones tiene una lista de las acciones disponibles y los operadores de flujo de programa para ese evento en particular. Haga clic en EstablecerCampo y arrástrelo al bloque de instrucción If. En el cuadro Nombre escriba Items.Status. En el cuadro Valor, escriba "Niveles bajos" (con las comillas). Cuando la cantidad caiga entre 50 y 100, el texto del Estado se cambiará.

Haga clic en la instrucción If nuevamente y note que en el lado inferior derecho del bloque se encuentran las opciones Add Else y Add Else If. Haga clic en la opción Add Else If para agregar ese bloque. En el cuadro de condición, escriba Items.Quantity<50. En el panel del catálogo de acciones, arrastre EstablecerCampo al bloque Else If. En el cuadro Nombre, escriba Items.Status y en el cuadro Valor, escriba "¡Pedir ahora" (con las comillas). Cuando la cantidad caiga por debajo de 50, el texto del campo Estado se cambiará.

Haga clic en la instrucción Else If y, a continuación, haga clic en Add Else. Arrastre SetField al bloque Else. En el cuadro Nombre, escriba Items.Status y en el cuadro Valor escriba "", una cadena vacía. Esto indica que si el número de elementos es mayor a 100, el campo Estado aparece en blanco. La macro debería parecerse a la de la figura 7.

Figura 7. Macro de datos completa

Macro de datos completada

Para guardar y cerrar la macro, haga clic derecho sobre la pestaña Elementos: antes de cambiar y, a continuación, en Cerrar.

Para probar la macro, con la tabla en la vista hoja de datos, cambie la cantidad de café a 100, haga clic fuera del registro y vea cómo el texto del campo Estado cambia a Niveles bajos. Cambie la cantidad de refrescos a 49 y el campo Estado cambia a ¡Pedir ahora!. Cambie la cantidad de té a 101. El campo Estado permanece en blanco. Todo esto se muestra en la figura 8.

Figura 8. El campo estado cambia cuando se cambia la cantidad

El campo de estado cambia al cambiar la cantidad

Otra opción disponible con las macros de datos con nombre es la posibilidad de pasar parámetros. Los parámetros generalmente se usan para mejorar el rendimiento de las bases de datos porque obligan a los desarrolladores y a los usuarios a limitar conjuntos de datos antes de que se ejecute la macro. Esto da como resultado macros más rápidas, menor carga en los servidores de las bases de datos y menor tráfico en la red. Los parámetros también aportan flexibilidad porque se puede volver a usar una macro sin modificaciones. Para agregar parámetros a macros de datos con nombre, haga doble clic sobre la tabla a la cual desea adjuntar una macro con nombre. En la pestaña Tabla, en el grupo Macros con nombre, haga clic en la flecha desplegable Macro con nombre y, a continuación, haga clic en Crear macro con nombre. En la parte superior del generador de macros (consulte la figura 9), haga clic en Crear parámetro.

Figura 9. Opción Crear parámetro en el generador de macros

Opción Crear parámetro del Generador de macros

Depurar macros de datos no es una experiencia tan rica como lo es en otros códigos de programación. No se puede repasar el código o usar la opción del cuadro de mensajes. Sin embargo, puede usar la tabla Registro de aplicaciones con las acciones de macro OnError, RaiseError y LogEvent para ayudar a encontrar errores de macros de datos. La tabla Registro de aplicaciones es una tabla de sistema (conocida como USysApplicationLog) que de forma predeterminada no se muestra en el panel Navegación. Si ocurre un error en la macro de datos, puede saber lo que sucedió si mira la información en la tabla Registro de aplicaciones.

Para mostrar la tabla Registro de aplicaciones, haga clic en la pestaña Archivo para mostrar la vista Backstage. En la pestaña Información, haga clic en Ver tabla de registro de aplicación. Si no ve el botón Ver tabla de registro de aplicación, quiere decir que todavía no se creó una tabla Registro de aplicaciones para esta base de datos. Cuando se registra un evento como tal con las acciones de macro LogEvent o RaiseError, el botón aparece en la pestaña Información.

Generador de expresiones

El generador de expresiones es una herramienta que lo ayuda a crear expresiones. Puede iniciar el generador de expresiones desde la mayoría de los lugares de Microsoft Access donde se escriben las expresiones. Tablas y campos, consultas, formularios y propiedades de informes, controles, consultas y macros pueden usar expresiones para evaluar los datos o la lógica para controlar el comportamiento de una aplicación. Ofrece un acceso fácil a los nombres de campos y controles de la base de datos, así como a muchas de las funciones integradas disponibles cuando se escriben expresiones. Con el generador de expresiones, puede crear una expresión desde cero o puede seleccionar algunas expresiones predefinidas para mostrar los números de página, la fecha actual y la fecha y hora actuales, por ejemplo.

En Access 2010, se hicieron cambios importantes al generador de expresiones. Con el generador de expresiones mejorado (consulte la figura 10), puede escribir expresiones más rápido y con menos errores.

Figura 10. Generador de expresiones en Access 2010

Generador de expresiones en Access 2010

El generador de expresiones incluye nuevas características y una interfaz de usuario más sencilla. Ya no debe recordar sintaxis ni funciones o propiedades disponibles. El nuevo generador de expresiones tiene IntelliSense, que proporciona toda la información que necesita cuando escribe una expresión.

Además, se usa la nueva interfaz de usuario revelación progresiva que significa que se muestran solo las funciones y propiedades que existen en un contexto determinado. En versiones anteriores de Microsoft Access, cada uno de los contextos en los que se usaba una expresión compartía un evaluador de expresiones único y común. Esto significaba que, independientemente de donde se usaba una expresión, las funciones y los operadores disponibles eran, en la mayoría de los casos, los mismos. En Access 2010, el generador de expresiones es contextual. Por ejemplo, la función FormatDateTime no está disponible en el contexto de una tabla, pero está disponible en todos los demás. También observe en la figura 10 que han desaparecido los botones de operador. Los operadores están disponibles en el panel de elementos de la expresión. Todos estos cambios reducen el desorden, tornan las decisiones mucho más fáciles de administrar y aumentan el área de edición.

En el diseñador de macros y en otros lugares de Access 2010 donde desee crear una expresión, si hace clic en el icono que se muestra en la figura 11 se muestra el generador de expresiones.

Figura 11. Icono del generador de expresiones

Icono del Generador de expresiones

A continuación, al escribir una expresión, se muestra una lista desplegable de campos, funciones o elementos de expresión similares a los que se muestran en la figura 12.

Figura 12. Al escribir se muestra una lista desplegable de opciones

Al escribir, se muestra una lista desplegable de opciones

Puede encontrar mucha más ayuda sobre las expresiones y cómo usar el generador de expresiones en la ayuda de Access 2010.

Macros y expresiones fáciles de usar

Ya sea que usted es un usuario nuevo de Microsoft Access o un desarrollador experto, las mejoras cuanto a la facilidad de uso del diseñador de macros facilitan más que nunca crear macros. Las nuevas construcciones Else y Else If hacen que las macros sean mucho más flexibles. Además, el nuevo catálogo de acciones y la característica IntelliSense eliminan la necesidad de memorizar los comandos y las acciones usadas frecuentemente. El generador de expresiones hace que crear expresiones sea mucho más sencillo. Todas estas mejoras le dan más control sobre la funcionalidad de las bases de datos que crea.

Recursos adicionales

Mostrar: