Una sola acción (como mover de un control en un objeto a otro control) puede desencadenar varios eventos distintos, que se producen en una secuencia específica. Conocer cuándo se producirán los eventos y el orden en que se ejecutarán es importante, ya que puede afectar a cómo y cuándo se ejecutarán las macros o procedimientos de eventos. Por ejemplo, si hay dos procedimientos de eventos que se ejecutarán en un orden específico, asegúrese de que los eventos asociados se ejecuten en ese mismo orden.
En este artículo...
Orden de eventos para controles en formularios
Los eventos se producen para los controles en los formularios al mover el foco a un control y al cambiar y actualizar datos en un control.
Nota: Microsoft Office Access muestra los nombres de evento de una forma ligeramente distinta en el Editor de Visual Basic que en la hoja de propiedades y en el Generador de macros. Por ejemplo, el evento denominado On Got Focus en la hoja de propiedades del formulario y en el Generador de macros se denomina GotFocus en el Editor de Visual Basic. En los ejemplos de este artículo se usa el formato de Visual Basic para Aplicaciones (VBA) para los nombres de evento.
Colocar el foco en un control
Al colocar el foco en un control de formulario (por ejemplo, al abrir un formulario que contiene uno o más controles activos, o bien al colocar el foco en otro control del mismo formulario), los eventos Enter y GotFocus se ejecutan en este orden:
Entrar en GotFocus
Al abrir un formulario, los eventos Enter y GotFocus se ejecutan después de los eventos asociados con la apertura del formulario (Open, Activate y Current), de esta forma:
Open (formulario) Activate (formulario) Current (formulario) Enter (control) GotFocus (control)
Cuando el foco abandona un control de un formulario (por ejemplo, al cerrar un formulario que contiene uno o más controles activos, o bien al desplazarse a otro control del mismo formulario), los eventos Exit y LostFocus se ejecutan en este orden:
Exit LostFocus
Al cerrar un formulario, los eventos Exit y LostFocus se ejecutan antes de los eventos asociados con el cierre del formulario (Unload, Deactivate y Close), de esta forma:
Exit (control) LostFocus (control) Unload (formulario) Deactivate (formulario) Close (formulario)
Cambiar y actualizar datos en un control
Al especificar o cambiar datos en un control de formulario y, después, colocar el foco en otro control, se ejecutan los eventos BeforeUpdate y AfterUpdate:
BeforeUpdate Afte rUpdate
Los eventos Exit y LostFocus de un control cuyos cambios de valores se producen después de los eventos BeforeUpdate y AfterUpdate:
BeforeUpdate AfterUpdate exit LostFocus
Al cambiar el texto de un cuadro de texto (o de una sección de cuadro de texto en un cuadro combinado), se ejecuta el evento Change. Este evento se ejecuta cada vez que cambia el contenido del control, pero antes de colocar el foco en otro control o registro (y, por lo tanto, antes de que se ejecuten los eventos BeforeUpdate y AfterUpdate). La siguiente secuencia de eventos se produce por cada tecla que presione en un cuadro de texto (o en la sección de cuadro de texto de un cuadro combinado):
KeyDown KeyPress Dirty Change KeyUp
El evento NotInList se ejecuta después de escribir un valor en un cuadro combinado que no se encuentra en la lista de cuadro combinado y, después, intentar colocar el foco en otro control o registro. El evento NotInList se ejecuta después de los eventos de teclado y de los eventos Change del cuadro combinado, pero antes de los eventos de cualquier otro control o del formulario. Si la propiedad LimitToList del cuadro combinado se establece en Yes, el evento Error del formulario se ejecutará inmediatamente después del evento NotInList:
KeyDown error dirty change KeyUp NotInList 0
Orden de eventos para registros en formularios
Los eventos se ejecutan para los registros en los formularios al mover el foco a otro registro, actualizar datos en un registro, eliminar registros existentes o crear un registro.
Colocar el foco en registros y actualizar datos en registros
Al colocar el foco en un registro existente de un formulario, escribir o cambiar datos en el registro y, después, mover el foco a otro registro, se produce la secuencia siguiente de eventos para el formulario:
Current (formulario) BeforeUpdate (formulario) AfterUpdate (formulario) Current (formulario)
Al salir del registro cuyos datos cambiaron, pero antes de escribir el registro siguiente, se producen los eventos Exit y LostFocus para el control que tiene el foco. Estos eventos se producen después de los eventos BeforeUpdate y AfterUpdate del formulario, de esta forma:
BeforeUpdate (formulario) AfterUpdate (formulario) Exit (control) LostFocus (control) Current (formulario)
Al mover el foco entre los controles de un formulario, se ejecutan los eventos de cada control. Por ejemplo, las siguientes secuencias de eventos solo se producen al realizar lo siguiente:
-
Abrir un formulario y cambiar los datos de un control:
Current (formulario) Enter (control) GotFocus (control) BeforeUpdate (control) AfterUpdate (control)
-
Colocar el foco en otro control:
Exit (control1) LostFocus (control1) Enter (control2) GotFocus (control2)
-
Colocar el foco en otro registro:
BeforeUpdate (formulario) AfterUpdate (formulario) Exit (control2) LostFocus (control2) Current (formulario)
Eliminar registros
Al eliminar un registro, los eventos siguientes se ejecutan para el formulario y en Microsoft Office Access se muestra un cuadro de diálogo para pedirle que confirme la eliminación:
Eliminar BeforeDelConfirm AfterDelConfirm
Si cancela el evento Delete, no se ejecutarán los eventos BeforeDelConfirm y AfterDelConfirm, ni se mostrará el cuadro de diálogo.
Crear un registro
Al colocar el foco en un nuevo registro (en blanco) de un formulario y, después, crear un registro escribiendo datos en un control, se ejecuta la siguiente secuencia de eventos:
Current (formulario) Enter (control) GotFocus (control) BeforeInsert (formulario) AfterInsert (formulario)
El evento BeforeInsert (formulario) se desencadena tan pronto como empiece a escribir en el control. El evento AfterInsert (formulario) se desencadena después de salir del registro.
Los eventos BeforeUpdate y AfterUpdate de los controles del formulario y del nuevo registro se ejecutan después del evento BeforeInsert y antes del evento AfterInsert.
Orden de eventos para formularios y subformularios
Los eventos se ejecutan para los formularios al abrir o cerrar un formulario, desplazarse entre formularios o al trabajar con datos en un formulario o subformulario.
Abrir y cerrar un formulario
Al abrir un formulario, se ejecuta la siguiente secuencia de eventos para el formulario:
Abrir Cargar cambiar el tamaño Activar actual
Si no hay ningún control activo en el formulario, el evento GotFocus se ejecuta para el formulario después del evento Activate, pero antes del evento Current.
Al cerrar un formulario, se ejecuta la siguiente secuencia de eventos para el formulario:
Descargar Desactivar Cerrar
Si no hay ningún control activo en el formulario, el evento LostFocus se ejecuta para el formulario después del evento Unload, pero antes del evento Deactivate.
Desplazarse entre formularios
Al cambiar entre dos formularios abiertos, el evento Deactivate se ejecuta para el primer formulario, mientras que el evento Activate se ejecuta para segundo formulario:
Deactivate (formulario1) Activate (formulario2)
El evento Deactivate de un formulario también se ejecuta al cambiar del formulario a otra ficha del objeto en Access. Pero el evento Deactivate no se ejecuta al cambiar a un cuadro de diálogo, a un formulario cuya propiedad PopUp se establece en Yes o a una ventana de otro programa.
Nota: El evento Open no se ejecuta si coloca el foco en un formulario que ya está abierto, incluso si coloco el foco en ese formulario con una acción OpenForm.
Trabajar con datos en un formulario
Los eventos de formulario y control se ejecutan al desplazarse entre los registros del formulario y modificar datos. Por ejemplo, al abrir por primera vez un formulario, se ejecuta la siguiente secuencia de eventos:
Open (formulario) Load (formulario) Resize (formulario) Activate (formulario) Current (formulario) Enter (control)0 GotFocus (control)
De forma similar, al cerrar un formulario, se ejecuta la siguiente secuencia de eventos:
Exit (control) LostFocus (control) Unload (formulario) Deactivate (formulario) Close (formulario)
Si cambió datos en un control, los eventos BeforeUpdate y AfterUpdate del control y el formulario se ejecutarán antes del evento Exit del control.
Trabajar con subformularios
Al abrir un formulario que contiene un subformulario, el subformulario y sus registros se cargan antes que el formulario principal. Por lo tanto, los eventos del subformulario y sus controles (como Open, Current, Enter y GotFocus) se ejecutan antes de los eventos del formulario. Pero el evento Activate no se ejecuta para los subformularios. Por lo tanto, al abrir un formulario principal, se desencadena un evento Activate solo para el formulario principal.
De forma similar, al cerrar un formulario que contiene un subformulario, el subformulario y sus registros se descargan después del formulario. El evento Deactivate no se ejecuta para los subformularios. Por lo tanto, al cerrar un formulario principal, se desencadena un evento Deactivate solo para el formulario principal. Los eventos para los controles, formularios y subformularios se ejecutan en el orden siguiente:
-
Eventos para los controles de subformulario (como Exit y LostFocus)
-
Eventos para los controles de formulario (incluido el control de subformulario)
-
Eventos para el formulario (como Deactivate y Close)
-
Eventos para el subformulario
Nota: Como los eventos para un subformulario se ejecutan después de cerrar el formulario principal, algunos eventos (como cancelar el cierre del formulario principal desde un evento en el subformulario) no se ejecutarán. Puede que necesite mover estos tipos de pruebas de validación a un evento del formulario principal.
Orden de eventos para pulsaciones de teclas y clics de mouse
Los eventos de teclado se ejecutan para formularios y controles al presionar teclas o enviar pulsaciones de teclas mientras el formulario o control tiene el foco. Los eventos de mouse se ejecutan para formularios, secciones de formulario y controles en formularios al hacer clic en los botones del mouse mientras el puntero del mouse se encuentra sobre un formulario, sección o control. Los eventos de mouse también se ejecutan al colocar el puntero del mouse sobre un formulario, sección o control.
Eventos de teclado
Al presionar y soltar una tecla mientras el control de un formulario tiene el foco (o usar la acción SendKeys o instrucción para enviar una pulsación de tecla), se ejecuta la siguiente secuencia de eventos:
KeyDown KeyPress KeyUp
Al presionar y soltar una tecla o enviar una pulsación de tecla en el juego de caracteres ANSI, se ejecutan los eventos KeyDown, KeyPress y KeyUp. Si mantiene presionada una tecla ANSI, los eventos KeyDown y KeyPress se alternarán repetidamente (KeyDown, KeyPress, KeyDown, KeyPress, etc.) hasta que suelte la tecla; después, se ejecutará el evento KeyUp.
Si presiona y suelta una tecla distinta de ANSI, se ejecutarán los eventos KeyDown y KeyUp. Si mantiene presionada una tecla distinta de ANSI, el evento KeyDown se ejecutará repetidamente hasta que suelte la tecla y, después, se ejecutará el evento KeyUp.
Si, al presionar una tecla, se desencadena otro evento para un control, ese evento se ejecutará después del evento KeyPress, pero antes del evento KeyUp. Por ejemplo, si una pulsación de tecla cambia el texto de un cuadro de texto (lo que desencadena un evento Change), se ejecutará la siguiente secuencia de eventos:
KeyDown KeyPress Cambiar KeyUp
Si una pulsación de tecla hace que el foco se desplace de un control a otro, se ejecutará el evento KeyDown para el primer control, mientras que los eventos KeyPress y KeyUp se ejecutarán para el segundo control. Por ejemplo, si cambia los datos de un control y, después, presiona la tecla TAB para desplazarse hasta el siguiente control, se ejecutarán las siguientes secuencias de eventos:
-
Primer control:
KeyDown BeforeUpdate AfterUpdate Exit LostFocus
-
Segundo control:
Entrar en GotFocus KeyPress KeyUp
Eventos de mouse
Al hacer clic y soltar un botón del mouse mientras el puntero del mouse se encuentra sobre un control en un formulario, se ejecutará la siguiente secuencia de eventos para el control:
MouseDown MouseUp Click
Si un control tiene el foco y hace clic en otro control para desplazar el foco a este segundo control, se ejecutarán las siguientes secuencias de eventos:
-
Primer control:
Exit LostFocus
-
Segundo control:
Entrar en GotFocus MouseDown MouseUp Click
Si se desplaza a otro registro y, después, hace clic en un control, el evento Current del formulario también se ejecutará antes del evento Enter del control.
Al hacer doble clic en un control, se ejecutarán los eventos Click y DblClick. Por ejemplo, al hacer doble clic en un control distinto de un botón de comando, se ejecutará la siguiente secuencia de eventos para el control:
MouseD propio MouseUp Click DblClick MouseUp
Al hacer doble clic en un botón de comando, se ejecutará la secuencia de eventos anterior, seguida de un segundo evento Click.
El evento MouseMove de un formulario, sección o control se ejecuta al colocar el puntero del mouse sobre el formulario, sección o control. Este evento es independiente del resto de los eventos de mouse.
Orden de eventos para informes y secciones de informes
Los eventos se ejecutan para informes y secciones de informes al abrir un informe para imprimirlo o generar una vista previa, o bien al cerrar un informe.
Eventos para informes
Al abrir un informe para imprimirlo o generar una vista previa y, después, cerrar el informe o cambiar a otra ficha del objeto en Access, se ejecutará la siguiente secuencia de eventos para el informe:
Abrir Activar Cerrar Desactivar
Al cambiar entre dos informes abiertos, el evento Deactivate se ejecuta para el primer informe, mientras que el evento Activate se ejecuta para el segundo informe:
Deactivate (informe1) Activate (informe2)
El evento Deactivate de un informe también se ejecuta al cambiar desde el informe a otra ficha del objeto en Access. Pero el evento Deactivate no se ejecuta al cambiar a un cuadro de diálogo, a un formulario cuya propiedad PopUp se establece en Yes o a una ventana de otro programa.
Al abrir un informe basado en una consulta, Access desencadena el evento Open para el informe antes de ejecutar la consulta subyacente. Como resultado, puede establecer los criterios para el informe con una macro o procedimiento de evento que responda al evento Open. Por ejemplo, la macro o el procedimiento de evento puede abrir un cuadro de diálogo personalizado donde puede especificar los criterios del informe.
Eventos para secciones de informe
Al imprimir o generar la vista previa de un informe, los eventos Format y Print se ejecutan para las secciones del informe después de los eventos Open y Activate del informe y antes de los eventos Close o Deactivate del informe:
Abrir (informe) Activar (informe) Formato (sección de informe) Imprimir (sección de informe) Cerrar (informe) Desactivar (informe)
Seguridad Puede usar la vista Informe para habilitar el filtrado de informes por parte de los usuarios. Pero, a diferencia de la Vista previa de impresión, los eventos Format e Print de cualquier sección no se producen en la vista Informe. Esto también se aplica a los resultados de la función vba y a los procedimientos definidos por el usuario que se muestran en los controles (como títulos de etiqueta, estado de visualización, formato condicional, cambio de tamaño de los controles, etc.) dentro de esos eventos. Por lo tanto, no use código en este evento para dar formato, ocultar o imprimir datos confidenciales, que podrían quedar expuestos. Se recomienda prefiltrar los datos o deshabilitar la vista previa de informe estableciendo la propiedad AllowReportView en No.
Además, los eventos siguientes se pueden ejecutar durante o después de aplicar formato, pero antes del evento Print:
-
El evento Retreat se ejecuta cuando Access vuelve a una sección anterior al aplicar formato al informe.
-
El evento NoData se ejecuta si en el informe no se muestra ningún registro.
-
El evento Page se ejecuta después de aplicar el formato, pero antes de la impresión. Puede usar este evento para personalizar la apariencia del informe impreso.