Vous êtes sur la page 1sur 48

Evento Activate

El evento Activate se produce cuando un formulario o informe recibe el enfoque y se


convierte en la ventana activa.

Comentarios
Nota El evento Activate no se produce cuando un formulario vuelve a recibir el enfoque
procedente de un cuadro de dilogo, elemento emergente u otro formulario.
Para ejecutar una macro o procedimiento de evento cuando se produzcan estos eventos,
establezca la propiedad AlActivar (OnActivate) o AlDesactivar (OnDeactivate) al
nombre de la macro o a [Procedimiento de evento].
Para hacer que un formulario o informe sea el activo, puede abrirlo, hacer clic en uno de
sus controles o utilizar el mtodo SetFocus de Visual Basic (slo para formularios).
El evento Activate slo puede producirse cuando el formulario o informe est visible.
El evento Activate se produce antes del evento GotFocus; y el evento Deactivate despus
del evento LostFocus.
Al alternar entre dos formularios abiertos, se produce el evento Deactivate para el
formulario del que se parte y el evento Activate para el formulario al que se llega. Si los
formularios no contienen ningn control visible y habilitado, se producir el evento
LostFocus para el primer formulario antes del evento Deactivate, y el evento GotFocus para
el segundo despus del evento Activate.
La primera vez que se abre un formulario, se producen los eventos siguientes, en el orden
indicado:
Open Load Resize Activate Current
Al cerrar un formulario, se producen los eventos siguientes, en el orden indicado:
Unload Deactivate Close

Ejemplo
En el ejemplo siguiente se indica cmo mostrar una barra de herramientas personalizada
denominada CustomToolbar cuando un formulario recibe el enfoque.
Private Sub Form_Activate()
DoCmd.ShowToolbar "CustomToolbar", acToolbarYes
End Sub
Pgina

107

Activate, Deactivate (Eventos)


El evento Activate se produce cuando un objeto pasa a ser la ventana activa. El evento
Deactivate se produce cuando un objeto ya no es la ventana activa.
Sintaxis
Private Sub objeto_Activate()
Private Sub objeto_Deactivate()
El marcador de posicin objeto representa una expresin de objeto que queda como
resultado un objeto incluido en la lista Se aplica a.
Comentarios
Un objeto puede pasar a activo utilizando el mtodo Show en cdigo.
El evento Activate se puede producir slo cuando un objeto es visible. Un UserForm
cargado con Load no es visible a menos que utilice el mtodo Show.
Los eventos Activate y Deactivate se producen slo cuando mueve el enfoque dentro de
una aplicacin. Mover el enfoque a o desde un objeto en otra aplicacin no activa ningn
evento.
El evento Deactivate no se produce cuando descarga un objeto.

Ejemplo de eventos Activate, Desactivate


El cdigo siguiente usa dos UserForms: UserForm1 y UserForm2. Copie estos
procedimientos en el mdulo UserForm1, despus agregue UserForm2. El ttulo de
UserForm1 se crea en su procedimiento de evento Activate. Cuando el usuario hace clic en
el rea de cliente de UserForm1, se carga UserForm2, y se muestra, desencadenando el
evento Desactivate de UserForm1, cambiando sus ttulos.
' Evento Activate para UserForm1
Private Sub UserForm_Activate()
UserForm1.Caption = "Click my client area"
End Sub
' Evento Click para UserForm1
Private Sub UserForm_Click()
Load UserForm2
UserForm2.StartUpPosition = 3
UserForm2.Show
End Sub

Pgina

108

' Evento Deactivate para UserForm1


Private Sub UserForm_Deactivate()
UserForm1.Caption = "I just lost the focus!"
UserForm2.Caption = "Focus just left UserForm1 and came to me"
End Sub

Evento AfterBeginTransaction
Ocurre justo despus de que Microsoft Access indique al servidor que una transaccin por
lotes comienza con una actualizacin por lotes.
Private Sub Form_AfterBeginTransaction(Conexin As ADODB.Connection)
Conexin La conexin en la que tiene lugar la transaccin por lotes.

Comentarios
Este evento se aplica a formularios de un proyecto Access cuyas propiedades
BatchUpdates estn establecidas en Verdadero.
Este evento se utiliza para cualquier proceso que deba producirse antes de que Access
confirme cualquier registro dentro de una transaccin por lotes. Cualquier cambio en los
datos realizado en este punto se realiza en la transaccin por lotes.

Ejemplo
El ejemplo siguiente muestra la sintaxis de una subrutina que intercepta el evento
AfterBeginTransaction.
Private Sub Form_AfterBeginTransaction(Connection As ADODB.Connection)
MsgBox "Access has signaled to " & Connection.Name & " to " _
& "begin a batch transaction for the current batch of updates," _
& "but has not yet committed any records to the server."
End Sub

Evento AfterCommitTransaction
Ocurre justo despus de que Microsoft Access confirme los cambios dentro de una
transaccin por lotes al servidor.
Private Sub Form_AfterCommitTransaction(Conexin As ADODB.Connection)
Conexin La conexin en la que tiene lugar la transaccin por lotes.

Pgina

109

Comentarios
Este evento se aplica a formularios de un proyecto Access cuyas propiedades
BatchUpdates estn establecidas en Verdadero.
Este evento ocurre slo si se ha realizado correctamente la actualizacin por lotes.
Cualquier cambio en los datos realizado en este punto se realiza fuera la transaccin por
lotes.

Ejemplo
El ejemplo siguiente muestra la sintaxis de una subrutina que intercepta el evento
AfterCommitTransaction.
Private Sub Form_AfterCommitTransaction(Connection As ADODB.Connection)
MsgBox "Access has committed all pending updates to " _
& Connection.Name & ". The batch transaction is now complete."
End Sub

Evento AfterDelConfirm
El evento AfterDelConfirm se produce despus de que el usuario confirme las
eliminaciones y de que los registros se eliminen efectivamente o se cancelen las
eliminaciones.
Comentarios
Para ejecutar una macro o un procedimiento de evento cuando se produzcan estos eventos,
establezca la propiedad DespusDeConfirmarEliminacin (AfterDelConfirm) en el
nombre de la macro o en [Event Procedure].
Una vez eliminado un registro, ste se almacena en un bfer temporal.
El evento AfterDelConfirm se produce despus de que el registro o registros se eliminen
efectivamente, o despus de que se cancelen las eliminaciones. Si no se cancela el evento
BeforeDelConfirm, se producir el evento AfterDelConfirm despus de que aparezca el
cuadro de dilogo Confirmar eliminacin. El evento AfterDelConfirm se produce incluso
cuando se cancela el evento BeforeDelConfirm. El procedimiento de evento
AfterDelConfirm devuelve informacin de estado sobre la eliminacin. Por ejemplo, puede
usar una macro o procedimiento de evento asociado a AfterDelConfirm para volver a
calcular totales a los que afecte la eliminacin de registros.
Si cancela el evento Delete, el evento AfterDelConfirm no se producir, ni tampoco
aparecer el cuadro de dilogo Confirmar eliminacin.

Pgina

110

Nota El evento AfterDelConfirm no se produce, ni se muestra el cuadro de dilogo


Confirmar eliminacin, cuando se desactiva la casilla de verificacin Cambios en los
registros de la seccin Confirmar de la ficha Modificar/Buscar del cuadro de dilogo
Opciones, que aparece al hacer clic en el comando Opciones del men Herramientas.
Ejecutando una macro o procedimiento de evento cuando se produce el evento Delete, se
puede impedir que se elimine un registro, o permitir que se elimine slo cuando se den
ciertas condiciones. Tambin puede usar un evento Delete para mostrar un cuadro de
dilogo preguntando al usuario si desea eliminar un registro antes de hacerlo efectivamente.
Para eliminar un registro puede hacer clic en el comando Eliminar registro del men
Edicin. De este modo eliminar el registro actual (el que indica el selector de registro).
Tambin puede hacer clic en el selector de registro o en el comando Seleccionar registro
del men Edicin para seleccionar el registro y, a continuacin, presionar la tecla SUPR
para eliminarlo. Si hace clic en Eliminar registro, en el selector de registro del registro
actual o en Seleccionar registro, se producirn los eventos Exit y LostFocus para el control
que tenga el enfoque. Si ha modificado algn dato del registro, se producirn los eventos
BeforeUpdate y AfterUpdate para el registro antes que los eventos Exit y LostFocus. Si
hace clic en el selector de registro de un registro distinto, se producir tambin el evento
Current.
Una vez eliminado el registro, el enfoque pasar al registro siguiente, producindose para l
el evento Current seguido de los eventos Enter y GotFocus para su primer control.
En ese momento se produce el evento BeforeDelConfirm, inmediatamente antes de que
Microsoft Access muestre el cuadro de dilogo Confirmar eliminacin solicitando que se
confirme la eliminacin. Despus de responder al cuadro de dilogo, confirmando la
eliminacin o cancelndola, se produce el evento AfterDelConfirm.
Es posible eliminar ms de un registro a la vez. El evento Delete se produce despus de la
eliminacin de cada registro. De esta forma tendr acceso a los datos de cada registro antes
de su eliminacin efectiva, y podr confirmar o cancelar cada eliminacin en la macro o
procedimiento de evento Delete. Cuando se elimina ms de un registro, los eventos Current
del registro siguiente al ltimo eliminado y Enter y GotFocus de su primer control no se
producen hasta despus de la eliminacin de todos los registros. En otras palabras, el evento
Delete se produce para cada registro seleccionado, pero no ocurre ningn otro evento hasta
que se eliminan todos los registros seleccionados. El evento AfterDelConfirm tampoco se
produce hasta despus de la eliminacin de todos los registros seleccionados.
Ejemplo
El ejemplo siguiente indica la forma de usar el procedimiento de evento AfterDelConfirm
para mostrar un mensaje que indique si la eliminacin se ha realizado de la forma habitual o
si ha sido cancelada en Visual Basic o por el usuario.
Private Sub Form_AfterDelConfirm(Status As Integer)
Select Case Status
Pgina

111

Case acDeleteOK
MsgBox "Deletion occurred normally."
Case acDeleteCancel
MsgBox "Programmer canceled the deletion."
Case acDeleteUserCancel
MsgBox "User canceled the deletion."
End Select
End Sub

Evento AfterFinalRender
Ocurre despus de que se representen todos los elementos en la vista Grfico dinmico
especificada.
Private Sub Form_AfterFinalRender(ByVal drawObject As Object)
drawObject Objeto ChChartDraw. Utilice los mtodos y propiedades de este objeto para
dibujar objetos en el grfico.

Ejemplo
El ejemplo siguiente muestra la sintaxis de una subrutina que intercepta el evento
AfterFinalRender.
Private Sub Form_AfterFinalRender(ByVal drawObject As Object)
MsgBox "The PivotChart View has fully rendered."
End Sub

Evento AfterInsert

El evento AfterInsert se produce despus de agregar un nuevo registro.

Nota Cuando se establece el valor de un control con una macro o con Visual Basic, no se
activan estos eventos.

Comentarios
Puede usar una macro o procedimiento de evento AfterInsert para volver a consultar un
conjunto de registros siempre que se agregue uno nuevo.

Ejemplo
En este ejemplo se muestra la forma de usar un procedimiento de evento BeforeInsert para
comprobar que el usuario desea crear un nuevo registro, y un procedimiento de evento
AfterInsert para volver a consultar el origen de registros del formulario Empleados cada
vez que se agrega un nuevo registro.

Pgina

112

Para probar el ejemplo, agregue el siguiente procedimiento de evento a un formulario


denominado Empleados basado en una tabla o consulta. Sitese en la vista Hoja de datos
del formulario e intente insertar un registro.
Private Sub Form_BeforeInsert(Cancel As Integer)
If MsgBox("Insert new record here?", _
vbOKCancel) = vbCancel Then
Cancel = True
End If
End Sub
Private Sub Form_AfterInsert()
Forms!Employees.Requery
End Sub

Evento AfterLayout
Ocurre despus de que se hayan diseado todos los grficos de la vista Grfico dinmico
especificada, pero antes de que se hayan representado.
Private Sub Form_AfterLayout(ByVal drawObject As Object)
drawObject Objeto ChChartDraw. Utilice los mtodos y propiedades de este objeto para
dibujar objetos en el grfico.

Comentarios
Durante este evento, puede volver a colocar los objetos ChTitle, ChLegend, ChChart y
ChAxis para cada vista Grfico dinmico cambiando las propiedades Izquierda (Left) y
Superior (Top). Puede volver a colocar el objeto ChPlotArea cambiando sus propiedades
Izquierda (Left), Superior (Top), Derecha (Right) y Abajo (Bottom). Estas propiedades
no se pueden cambiar fuera de este evento.

Ejemplo
El ejemplo siguiente muestra la sintaxis de una subrutina que intercepta el evento
AfterLayout.
Private Sub Form_AfterLayout(ByVal drawObject As Object)
MsgBox "The PivotChart view has been laid out."
End Sub

Evento AfterRender
Ocurre despus de que se haya representando el objeto designado por el argumento
chartObject.

Pgina

113

Private Sub Form_AfterRender(ByVal drawObject As Object, ByVal chartObject As


Object)
drawObject Objeto ChChartDraw. Utilice los mtodos y propiedades de este objeto para
dibujar objetos en el grfico.
chartObject El objeto que se acaba de representar. Utilice la funcin TypeName para
determinar qu tipo de objeto se acaba de representar.

Ejemplo
El ejemplo siguiente muestra la sintaxis de una subrutina que intercepta el evento
AfterRender.
Private Sub Form_AfterRender( _
ByVal drawObject As Object, ByVal chartObject As Object)
MsgBox TypeName(chartObject) & " has been rendered."
End Sub

Evento AfterUpdate
El evento AfterUpdate se produce despus de que se actualicen los datos modificados en un
control o registro.

Comentarios
Notas
Al modificar los datos de un control con Visual Basic o con una macro que contenga la
accin EstablecerValor no se activan estos eventos para el control. Sin embargo, si a
continuacin se desplaza a otro registro o si guarda el registro actual, se producir el evento
AfterUpdate del formulario.
El evento AfterUpdate slo se aplica a los controles de formularios y no a los de informes.
Este evento no se aplica a los botones de opcin, a las casillas de verificacin ni a los
botones de alternar de un grupo de opciones. Slo se aplica al grupo de opciones en s.
Para ejecutar una macro o procedimiento de evento cuando se produzca este evento,
establezca la propiedad DespusDeActualizar (AfterUpdate) en el nombre de la macro o
en [Event Procedure].
El evento AfterUpdate se produce cuando se actualiza un control o un registro. Dentro de
un registro, los datos modificados de cada control se actualizan cuando el control pierde el
enfoque o cuando el usuario presiona ENTRAR o TAB. Cuando el enfoque abandona el
registro, o cuando el usuario hace clic en el comando Guardar registro del men
Registros, se actualiza todo el registro y los datos se guardan en la base de datos.

Pgina

114

Al introducir datos nuevos o modificados en un control de un formulario y moverse


despus a otro registro o guardar el actual eligiendo Guardar registro en el men
Registros, el evento AfterUpdate del formulario se produce inmediatamente despus del
evento AfterUpdate del control. Al pasar a otro registro se producen los eventos Exit y
LostFocus del control, seguidos del evento Current del registro que pasa a ser el registro
activo y de los eventos Enter y GotFocus del primer control de este registro. Para ejecutar
la macro o el procedimiento de evento de AfterUpdate sin ejecutar los de Exit y LostFocus,
guarde el registro con el comando Guardar registro del men Registros.
Las macros y los procedimientos de evento de AfterUpdate slo se ejecutan si se modifican
los datos de un control. Este evento no se produce cuando cambia el valor de un control
calculado. Las macros y los procedimientos de evento de AfterUpdate para un formulario
slo se ejecutan al modificar los datos de uno o ms controles del registro.
En los controles dependientes, la propiedad ValorAnterior (OldValue) no se establece al
valor actualizado hasta despus de producirse el evento AfterUpdate del formulario. Incluso
cuando el usuario introduce un nuevo valor en el control, el valor de la propiedad
ValorAnterior (OldValue) no cambia hasta que se guardan los datos (se actualiza el
registro). Si cancela una actualizacin, el contenido de la propiedad ValorAnterior
(OldValue) reemplazar al valor existente en el control.
Nota Para realizar validaciones simples o validaciones ms complejas (como obligar a que
haya un valor en un campo o validar ms de un control de un formulario), puede utilizar la
propiedad ReglaDeValidacin (ValidationRule) de los controles y las propiedades
ReglaDeValidacin (ValidationRule) y Requerido (Required) para los campos y
registros de las tablas.

Evento ApplyFilter
El evento ApplyFilter puede ocurrir en un proyecto de Microsoft Access (.ADP) o en una
base de datos de Access (.MDB).
En una base de datos de Access, un evento ApplyFilter se produce cuando el usuario hace
una de las acciones siguientes:
Hace clic en Aplicar filtro u ordenar en el men Registros en la vista Formulario, hace
clic en Aplicar filtro u ordenar en el men Filtro en la ventana Filtro, o hace clic en
Aplicar filtro
en la barra de herramientas. De esta forma se aplica el filtro que se ha
creado ms recientemente (con la caracterstica Filtro por formulario o con la ventana Filtro
u orden avanzado).
En el men Registros en la vista Formulario, selecciona Filtro y hace clic en Filtro del
servidor por formulario, o en Filtro por seleccin
en la barra de herramientas. De
esta forma se aplica un filtro basndose en la seleccin actual del formulario.

Pgina

115

En el men Registros en la vista Formulario, selecciona Filtro y hace clic en Filtro


excluyendo la seleccin. Esto aplica un filtro que excluye la seleccin actual
efectuada en el formulario.

Hace clic en Quitar Filtro u ordenar del men Registros en la vista Formulario o
hace clic en el botn Quitar filtro
de la barra de herramientas. Esto quita
cualquier filtro (u ordenacin) que se est aplicando al formulario.

Hace clic en Filtro por seleccin, Filtro excluyendo la seleccin, Quitar filtro u
ordenar o escribe un valor o una expresin en el cuadro Filtro para en el men
contextual cuando un control dependiente tiene el enfoque.

Cierra la ventana Filtro u orden avanzado o la ventana Filtro por formulario.

Hace clic en Filtro u orden avanzado en el men Filtro mientras est abierta la
ventana Filtro por formulario o hace clic en Filtro por formulario en el men
Filtro mientras est abierta la ventana Filtro u orden avanzado. De esta forma hace
que se produzca el evento ApplyFilter cuando se cierra la ventana de filtro abierta y
que luego se produzca el evento Filter al abrirse la otra ventana filtro.

Dentro de un proyecto de Access, ocurre un evento ApplyFilter cuando el usuario realiza


una de las siguientes acciones:
Hace clic en Aplicar filtro u ordenar en el men Registros en la vista Formulario, hace
clic en Aplicar filtro u ordenar en el men Filtro en la ventana Filtro, o hace clic en
Aplicar filtro
en la barra de herramientas. Esto se aplica al filtro que se ha creado ms
recientemente (mediante la funcin Filtro por formulario).
Hace clic en el comando Aplicar filtro de servidor del men Registros en la vista
Formulario, hace clic en el comando Aplicar filtro de servidor del men Filtro en la
ventana Filtro, o hace clic en Aplicar filtro de servidor
en la barra de herramientas.
Esto se aplica al filtro que se ha creado ms recientemente (mediante la funcin Filtro de
servidor por formulario).

En el men Registros en la vista Formulario, selecciona Filtro y hace clic en Filtro


del servidor por formulario, o en Filtro por seleccin
en la barra de
herramientas. Esto se aplica a un filtro basado en la seleccin actual del formulario.

En el men Registros en la vista Formulario, selecciona Filtro y hace clic en Filtro


excluyendo la seleccin. Esto aplica un filtro que excluye la seleccin actual
efectuada en el formulario.

Hace clic en Filtro por seleccin o en Filtro excluyendo la seleccin o escribe un


valor o una expresin en el cuadro Filtrar por del men contextual cuando un
control dependiente tiene el enfoque.

Pgina

116

Comentarios
Para ejecutar una macro o procedimiento de evento cuando se produce este evento,
establezca la propiedad OnApplyFilter al nombre de la macro o a [Procedimiento de
evento].
El evento ApplyFilter se puede utilizar para:

Asegurarse de que es correcto el filtro que se est aplicando. Por ejemplo, quizs
desee asegurarse de que cualquier filtro que se aplique a un formulario Pedidos
incluye criterios que restringen el campo FechaPedido. Si es as, compruebe el valor
de la propiedad Filtro (Filter) o FiltroServidor (ServerFilter) del formulario para
asegurarse de que este criterio est incluido en la expresin de la clusula WHERE.

Cambiar la presentacin del formulario antes de que sea aplicado el filtro. Por
ejemplo, cuando se aplica un filtro determinado, quizs desee deshabilitar u ocultar
ciertos campos que no son apropiados para los registros que muestra el filtro.

Deshacer o modificar acciones efectuadas cuando se ha producido el evento Filter.


Por ejemplo, se pueden deshabilitar u ocultar algunos controles del formulario
cuando el usuario est creando el filtro, porque no se desea que estos controles estn
incluidos en los criterios del filtro. Luego se pueden habilitar o mostrar estos
controles despus de ser aplicado el filtro.

Las acciones de la macro o del procedimiento de evento ApplyFilter se producen antes de


ser aplicado o eliminado el filtro o despus de que se cierre la ventana Filtro u orden
avanzado, Filtro por formulario o Filtro del servidor por formulario, pero antes de que se
vuelva a mostrar el formulario. Los criterios que se han introducido en el filtro recin
creado estn disponibles para la macro o el procedimiento de evento ApplyFilter como
valor de la propiedad Filtro (Filter) o FiltroDeServidor (ServerFilter).
Nota El evento ApplyFilter no se produce cuando el usuario realiza una de las acciones
siguientes:

Aplica o elimina un filtro utilizando las acciones AplicarFiltro, AbrirFormulario o


MostrarTodosRegistros en una macro o utilizando sus mtodos correspondientes del
objeto DoCmd de Visual Basic, que son ApplyFilter, OpenForm y
ShowAllRecords, respectivamente.

Utiliza la accin Cerrar o el mtodo Close del objeto DoCmd para cerrar la ventana
Filtro u orden avanzado, Filtro por formulario o Filtro de servidor por formulario.

Establece la propiedad Filtro (Filter) o FiltroDeServidor (ServerFilter), o la


propiedad ActivarFiltro (FilterOn) o FiltroDeServidorPorFormulario
(ServerFilterByForm) en una macro o en Visual Basic (aunque estas propiedades
se pueden establecer en una macro o procedimiento de evento ApplyFilter).

Pgina

117

Ejemplo
El ejemplo siguiente muestra cmo ocultar los controles CantidadDebida, Impuestos y
TotalFactura de un formulario Pedidos cuando el filtro aplicado restringe los registros a
slo los pedidos pagados.
Para probar este ejemplo, agregue el procedimiento de evento siguiente a un formulario
Pedidos que contenga los controles CantidadDebida, Impuestos y TotalFactura. Ejecute un
filtro que liste slo los pedidos pagados.
Private Sub Form_ApplyFilter(Cancel As Integer, ApplyType As Integer)
If Not IsNull(Me.Filter) And (InStr(Me.Filter, "Orders.Paid = -1")>0 _
Or InStr(Me.Filter, "Orders.Paid = True")>0)Then
If ApplyType = acApplyFilter Then
Forms!Orders!AmountDue.Visible = False
Forms!Orders!Tax.Visible = False
Forms!Orders!TotalDue.Visible = False
ElseIf ApplyType = acShowAllRecords Then
Forms!Orders!AmountDue.Visible = True
Forms!Orders!Tax.Visible = True
Forms!Orders!TotalDue.Visible = True
End If
End If
End Sub

Evento BeforeBeginTransaction
Ocurre justo despus de que Microsoft Access indique al servidor que comienza una
transaccin por lotes.
Private Sub Form_BeforeBeginTransaction(Cancelar As Integer, Conexin As
ADODB.Connection)
Cancelar Si establece este argumento en Verdadero, se cancela la transaccin por lotes a
la vez que se conservan todos los cambios pendientes en el formulario.
Conexin Conexin en la que tiene lugar la transaccin por lotes.

Comentarios
Este evento se aplica a formularios de un proyecto Access cuyas propiedades
BatchUpdates estn establecidas en Verdadero.
Este evento se utiliza para cualquier proceso que debe ocurrir antes de que Access inicie
una actualizacin por lotes. Cualquier cambio en los datos realizado en este punto se realiza
fuera la transaccin por lotes.

Pgina

118

Ejemplo
El ejemplo siguiente muestra la sintaxis de una subrutina que intercepta el evento
BeforeBeginTransaction.
Private Sub Form_BeforeBeginTransaction( _
Cancel As Integer, Connection As ADODB.Connection)
Dim intResponse As Integer
Dim strPrompt As String
strPrompt = "Batch transaction about to begin on " _
& Connection.Name & ". Do you wish to continue?"
intResponse = MsgBox(strPrompt, vbYesNo)
If intResponse = vbNo Then
Cancel = True
Else
Cancel = False
End If
End Sub

Evento BeforeCommitTransaction
Ocurre justo antes de que Microsoft Access indique al servidor que confirme todos los
cambios en una transaccin por lotes en los datos base del servidor.
Private Sub Form_BeforeCommitTransaction(Cancelar As Integer, Conexin As
ADODB.Connection)
Cancelar Si establece este argumento en Verdadero, se cancela la confirmacin de la
transaccin por lotes, se conservan todos los cambios pendientes en el formulario y se
deshace la transaccin por lotes en el servidor.
Conexin Conexin en la que tiene lugar la transaccin por lotes.

Comentarios
Este evento se aplica a formularios de un proyecto Access cuyas propiedades
BatchUpdates estn establecidas en Verdadero.
Cuando ocurre este evento, se han realizado todos los cambios, no se han producido errores
y Access est listo para convertir los cambios en permanentes. Cualquier cambio en los
datos realizado en este punto se realiza dentro de la transaccin por lotes.

Pgina

119

Ejemplo
El ejemplo siguiente muestra la sintaxis de una subrutina que intercepta el evento
BeforeCommitTransaction.
Private Sub Form_BeforeCommitTransaction( _
Cancel As Integer, Connection As ADODB.Connection)
Dim intResponse As Integer
Dim strPrompt As String
strPrompt = "Access is about to commit the batch transaction on " _
& Connection.Name & ". Do you wish to continue?"
intResponse = MsgBox(strPrompt, vbYesNo)
If intResponse = vbNo Then
Cancel = True
Else
Cancel = False
End If
End Sub

Evento BeforeDelConfirm
El evento BeforeDelConfirm se produce despus de que el usuario elimine uno o ms
registros dejndolos en el bfer, pero antes de que Microsoft Access muestre un cuadro de
dilogo solicitando al usuario que confirme las eliminaciones.

Comentarios
Para ejecutar una macro o un procedimiento de evento cuando se produzcan estos eventos,
establezca la propiedad AntesDeConfirmarEliminacin (BeforeDelConfirm) en el
nombre de la macro o en [Event Procedure].
Una vez eliminado un registro, ste se almacena en un bfer temporal. El evento
BeforeDelConfirm se produce despus del evento Delete (o, si se ha eliminado ms de un
registro, despus de la eliminacin de todos ellos, que habr provocado un evento Delete
por cada uno), pero antes de que aparezca el cuadro de dilogo Confirmar eliminacin. Al
cancelar el evento BeforeDelConfirm se restaura el registro o registros del bfer y se evita
que aparezca el cuadro de dilogo Confirmar eliminacin.
El evento AfterDelConfirm se produce despus de que el registro o registros se eliminen
efectivamente, o despus de que se cancelen las eliminaciones. Si no se cancela el evento
BeforeDelConfirm, se producir el evento AfterDelConfirm despus de que aparezca el
cuadro de dilogo Confirmar eliminacin. El evento AfterDelConfirm se produce incluso
cuando se cancela el evento BeforeDelConfirm.
Pgina

120

Si cancela el evento Delete, el evento BeforeDelConfirm no se producir, ni tampoco


aparecer el cuadro de dilogo Confirmar eliminacin.
Nota El evento BeforeDelConfirm no se produce, ni se muestra el cuadro de dilogo
Confirmar eliminacin cuando se desactiva la casilla de verificacin Cambios en los
registros de la seccin Confirmar de la ficha Modificar/Buscar del cuadro de dilogo
Opciones, que aparece al hacer clic en el comando Opciones del men Herramientas.
Ejecutando una macro o procedimiento de evento cuando se produce el evento Delete, se
puede impedir que se elimine un registro, o permitir que se elimine slo cuando se den
ciertas condiciones. Tambin puede usar un evento Delete para mostrar un cuadro de
dilogo preguntando al usuario si desea eliminar un registro antes de hacerlo efectivamente.
Para eliminar un registro puede hacer clic en el comando Eliminar registro del men
Edicin. De este modo eliminar el registro actual (el que indica el selector de registro).
Tambin puede hacer clic en el selector de registro o en el comando Seleccionar registro
del men Edicin para seleccionar el registro y, a continuacin, presionar la tecla SUPR
para eliminarlo. Si hace clic en Eliminar registro, en el selector de registro del registro
actual o en Seleccionar registro, se producirn los eventos Exit y LostFocus para el control
que tenga el enfoque. Si ha modificado algn dato del registro, se producirn los eventos
BeforeUpdate y AfterUpdate para el registro antes que los eventos Exit y LostFocus. Si
hace clic en el selector de registro de un registro distinto, se producir tambin el evento
Current.
Una vez eliminado el registro, el enfoque pasar al registro siguiente, producindose para l
el evento Current seguido de los eventos Enter y GotFocus para su primer control.
En ese momento se produce el evento BeforeDelConfirm, inmediatamente antes de que
Microsoft Access muestre el cuadro de dilogo Confirmar eliminacin solicitando que se
confirme la eliminacin. Despus de responder al cuadro de dilogo, confirmando la
eliminacin o cancelndola, se produce el evento AfterDelConfirm.
Es posible eliminar ms de un registro a la vez. El evento Delete se produce despus de la
eliminacin de cada registro. De esta forma tendr acceso a los datos de cada registro antes
de su eliminacin efectiva, y podr confirmar o cancelar cada eliminacin en la macro o
procedimiento de evento Delete. Cuando se elimina ms de un registro, los eventos Current
del registro siguiente al ltimo eliminado y Enter y GotFocus de su primer control no se
producen hasta despus de la eliminacin de todos los registros. En otras palabras, el evento
Delete se produce para cada registro seleccionado, pero no ocurre ningn otro evento hasta
que se eliminan todos los registros seleccionados. El evento BeforeDelConfirm no se
produce hasta despus de la eliminacin de todos los registros seleccionados.

Ejemplo
En el ejemplo siguiente se muestra cmo puede usar el procedimiento de evento
BeforeDelConfirm para suprimir el cuadro de dilogo Confirmar eliminacin y mostrar
un cuadro de dilogo personalizado al eliminar un registro.

Pgina

121

Private Sub Form_BeforeDelConfirm(Cancel As Integer, _


Response As Integer)
' Suppress default Delete Confirm dialog box.
Response = acDataErrContinue ' Display custom dialog box.
If MsgBox("Delete this record?", vbOKCancel) = vbCancel Then
Cancel = True
End If
End Sub

Evento BeforeInsert
El evento BeforeInsert se produce cuando el usuario escribe el primer carcter de un nuevo
registro, pero antes de que el registro se cree realmente.

Comentarios
Nota Cuando se establece el valor de un control con una macro o con Visual Basic, no se
activan estos eventos.
Para ejecutar una macro o procedimiento de evento cuando se produzcan estos eventos,
establezca la propiedad AntesDeInsertar (BeforeInsert) o DespusDeInsertar
(AfterInsert) al nombre de la macro o a [Procedimiento de evento].
Puede usar una macro o procedimiento de evento AfterInsert para volver a consultar un
conjunto de registros siempre que se agregue uno nuevo.
Los eventos BeforeInsert y AfterInsert son similares a BeforeUpdate y AfterUpdate. El
orden en que ocurren es el siguiente:
BeforeInsert BeforeUpdate AfterUpdate AfterInsert.
En la tabla siguiente se resume la interaccin entre estos eventos:
Evento

Se produce cuando

AntesDeInsertar
(BeforeInsert)

El usuario escribe el primer carcter de un nuevo registro.

BeforeUpdate

El usuario actualiza el registro.

DespusDeActualizar
(AfterUpdate)

El registro se actualiza.

DespusDeInsertar
(AfterInsert)

El registro actualizado es nuevo.

Pgina

122

Si el primer carcter de un nuevo registro se escribe en un cuadro de texto o cuadro


combinado, el evento BeforeInsert se produce antes del evento Change.

Ejemplo
En este ejemplo se muestra la forma de usar un procedimiento de evento BeforeInsert para
comprobar que el usuario desea crear un nuevo registro y un procedimiento de evento
AfterInsert para volver a consultar el origen de registros del formulario Empleados cada
vez que se agrega un nuevo registro.
Para probar el ejemplo, agregue el siguiente procedimiento de evento a un formulario
denominado Empleados basado en una tabla o consulta. Sitese en la vista Hoja de datos
del formulario e intente insertar un registro.
Private Sub Form_BeforeInsert(Cancel As Integer)
If MsgBox("Insert new record here?", _
vbOKCancel) = vbCancel Then
Cancel = True
End If
End Sub
Private Sub Form_AfterInsert()
Forms!Employees.Requery
End Sub

Evento BeforeQuery
Ocurre cuando la vista Tabla dinmica especificada consulta su origen de datos.
Private Sub Form_BeforeQuery()

Comentarios
Este evento se produce con bastante frecuencia. Algunos ejemplos de acciones que
desencadenan este evento incluyen agregar campos a la vista Tabla dinmica, mover
campos, ordenar o filtrar datos.

Ejemplo
El ejemplo siguiente muestra la sintaxis de una subrutina que intercepta el evento
BeforeQuery.
Private Sub Form_BeforeQuery()
MsgBox "The PivotTable view is about to query its data source."
End Sub

Pgina

123

Evento BeforeRender
Ocurre cuando se representa cualquier objeto de la vista Grfico dinmico especificada.
Private Sub Form_BeforeRender(ByVal drawObject As Object, ByVal chartObject As
Object, ByVal Cancelar As Object)
drawObject Referencia al objeto ChChartDraw. Utilice la propiedad DrawType del
objeto devuelto para determinar qu tipo de representacin es la que va a ocurrir.
chartObject Objeto que se va a representar. Utilice la funcin TypeName para determinar
el tipo de objeto.
Cancelar Establezca la propiedad Value de este objeto en Verdadero para cancelar la
representacin del objeto de vista Grfico dinmico.

Ejemplo
El ejemplo siguiente muestra la sintaxis de una subrutina que intercepta el evento
BeforeRender.
Private Sub Form_BeforeRender( _
ByVal drawObject As Object, _
ByVal chartObject As Object, _
ByVal Cancel As Object)
Dim intResponse As Integer
Dim strPrompt As String
strPrompt = "Cancel render of current object?"
intResponse = MsgBox(strPrompt, vbYesNo)
If intResponse = vbYes Then
Cancel.Value = True
Else
Cancel.Value = False
End If
End Sub

Evento BeforeScreenTip
Ocurre antes de que aparezca una informacin de pantalla de un elemento en una vista
Grfico dinmico o Tabla dinmica.
Private Sub Form_BeforeScreenTip(TextoInformacin
ObjetoContexto As Object)

As

String,

Pgina

ByVal

124

TextoInformacin Texto predeterminado para la informacin de pantalla. El cambio de


este argumento por una cadena vaca oculta efectivamente la informacin de pantalla; el
cambio por cualquier otro texto muestra el texto cambiado en la informacin de pantalla.
ObjetoContexto Objeto que genera la informacin de pantalla.

Ejemplo
El ejemplo siguiente oculta las informaciones de pantalla para todas las etiquetas de datos
en el formulario especificado.
Private Sub Form_BeforeScreenTip( _
TipText As String, ByVal ContextObject As Object)
If TypeName(ContextObject) = "ChDataLabel" Then
TipText = ""
End If
End Sub

Evento BeforeUpdate
El evento BeforeUpdate se produce antes de que se actualicen los datos de un control o
registro.

Comentarios
Al modificar los datos de un control con Visual Basic o con una macro que contenga la
accin EstablecerValor no se activan estos eventos para el control. Sin embargo, si a
continuacin se desplaza a otro registro o guarda el actual, se producir el evento
BeforeUpdate del formulario.
El evento BeforeUpdate slo se aplica a los controles de formularios y no a los de informes.
El evento BeforeUpdate no se aplica a los botones de opcin, a las casillas de verificacin
ni a los botones de alternar de un grupo de opciones. Slo se aplica al grupo de opciones en
s.
Comentarios
Para ejecutar una macro o un procedimiento de evento cuando se produzcan estos eventos,
establezca la propiedad AntesDeActualizar (BeforeUpdate) en el nombre de la macro o en
[Event Procedure].
El evento BeforeUpdate se produce cuando se actualiza un control o un registro. Dentro de
un registro, los datos modificados de cada control se actualizan cuando el control pierde el
enfoque o cuando el usuario presiona ENTRAR o TAB. Cuando el registro pierde el

Pgina

125

enfoque o cuando el usuario hace clic en el comando Guardar registro del men Registros,
se actualiza todo el registro y los datos se guardan en la base de datos.
Al introducir datos nuevos o modificados en un control de un formulario y moverse
despus a otro registro o guardar el actual mediante la opcin Guardar registro del men
Registros, el evento BeforeUpdate del formulario se produce inmediatamente despus del
evento BeforeUpdate del control. Al pasar a otro registro se producen los eventos Exit y
LostFocus del control, seguidos del evento Current del registro que pasa a ser el registro
activo y de los eventos Enter y GotFocus del primer control de este registro. Para ejecutar
las macros o procedimientos de evento de BeforeUpdate sin ejecutar los de Exit y
LostFocus, guarde el registro con el comando Guardar registro del men Registros.
La macro y los procedimientos de evento de BeforeUpdate slo se ejecutan si se modifican
los datos de un control. Estos eventos no se producen cuando cambia el valor de un control
calculado. La macro y los procedimientos de evento de BeforeUpdate para un formulario
slo se ejecutan al modificar los datos de uno o ms controles del registro.
En los formularios, puede usar el evento BeforeUpdate para cancelar la actualizacin de un
registro antes de pasar a otro.
Cuando el usuario introduce un nuevo valor en el control, el valor de la propiedad
OldValue no cambia hasta que se guardan los datos (se actualiza el registro). Si cancela una
actualizacin, el valor de la propiedad OldValue reemplazar el valor existente en el
control.
El evento BeforeUpdate se utiliza a menudo para validar datos, especialmente cuando se
realizan validaciones complejas, como aqullas que:

Implican condiciones sobre ms de un valor de un formulario.

Muestran mensajes de error diferentes en funcin de los datos introducidos.

Puede anular el usuario.

Contienen referencias a controles de otros formularios o funciones definidas por el


usuario.

Nota Para realizar validaciones simples o validaciones ms complejas como requerir que
haya un valor en un campo o validar ms de un control de un formulario, puede utilizar la
propiedad ReglaDeValidacin (ValidationRule) de los controles y las propiedades
ReglaDeValidacin (ValidationRule) y Requerido (Required) para los campos y registros
de las tablas.

Ejemplo
Este ejemplo muestra cmo se puede utilizar un procedimiento de evento BeforeUpdate
para comprobar si ya se ha introducido un nombre de producto en la base de datos. Despus

Pgina

126

de que el usuario introduzca un nombre de producto en el cuadro NombreProducto, el valor


se compara con el campo NombreProducto de la tabla Productos. Si coincide algn valor,
se mostrar un mensaje informando al usuario de que el producto ya se encuentra en la base
de datos.
Para probar el ejemplo, agregue el procedimiento de evento siguiente a un formulario
denominado Productos que contenga un cuadro de texto denominado NombreProducto.
Private Sub ProductName_BeforeUpdate(Cancel As Integer)
If(Not IsNull(DLookup("[ProductName]", _
"Products", "[ProductName] ='" _
& Me!ProductName & "'"))) Then
MsgBox "Product has already been entered in the database."
Cancel = True
Me!ProductName.Undo
End If
End Sub

Evento BeginBatchEdit
Ocurre tras el primer cambio en los datos de un formulario que permite las actualizaciones
por lotes, ya sea despus de que se active el formulario, o despus de que se haya
confirmado la ltima transaccin por lotes.
Private Sub Form_BeginBatchEdit(Cancelar As Integer)
Cancelar Si establece este argumento en Verdadero, se cancela el cambio pendiente y
por lo tanto la actualizacin por lotes, ya que entonces no quedan cambios pendientes.

Comentarios
Este evento se aplica a formularios de un proyecto Access cuyas propiedades
BatchUpdates estn establecidas en Verdadero.
Este evento es anlogo al evento Dirty, pero para un lote completo en vez de para un
registro en particular. El evento BeginBatchEdit ocurre antes del evento OnDirty
correspondiente para el formulario y el control.
La edicin de registros de un subformulario no desencadena este evento para el formulario
principal.

Ejemplo
El ejemplo siguiente muestra la sintaxis de una subrutina que intercepta el evento
BeginBatchEdit.
Private Sub Form_BeginBatchEdit(Cancel As Integer)
Dim intResponse As Integer

Pgina

127

Dim strPrompt As String


strPrompt = "Batch update about to begin. " _
& "Do you wish to continue?"
intResponse = MsgBox(strPrompt, vbYesNo)
If intResponse = vbNo Then
Cancel = True
Else
Cancel = False
End If
End Sub

Evento Change
El evento Change se produce cuando cambia el contenido de un cuadro de texto o la
porcin de texto de un cuadro combinado. Tambin ocurre cuando se mueve de una pgina
a otra en un control ficha.

Comentarios
Ejemplos de este evento son la introduccin directa de un carcter en el cuadro de texto o
combinado o la modificacin de la propiedad Texto (Text) del control con una macro o con
Visual Basic.
Notas

Cuando se establece el valor de un control con una macro o con Visual Basic, no se
activa este evento para el control. Para ello es necesario escribir los datos
directamente en el control o establecer su propiedad Texto (Text).
Este evento slo se aplica a los controles de formularios, y no a los de informes.

Para ejecutar una macro o procedimiento de evento cuando se produzca este evento,
establezca la propiedad AlCambiar (OnChange) al nombre de la macro o a
[Procedimiento de evento].
Ejecutando una macro o procedimiento de evento cuando se produce un evento Change,
puede coordinar la presentacin de los datos entre controles. Tambin puede mostrar datos
o una frmula en un control y el resultado en otro.
El evento Change no se produce cuando cambia un valor en un control calculado, ni al
seleccionar un elemento en la lista de un cuadro combinado.
Nota Un evento Change puede provocar una sucesin de eventos en cascada. Esto ocurre
cuando una macro o un procedimiento de evento que se ejecuta como respuesta al evento
Change del control altera el contenido del mismo, por ejemplo, cambiando el valor de una
propiedad que determina el valor del control, como la propiedad Texto (Text) de un cuadro
de texto. Para evitar que ocurran eventos en cascada:

Pgina

128

Si es posible, evite asociar a un control una macro o procedimiento de evento


Change que altere su contenido.

Evite crear dos o ms controles cuyos eventos Change se afecten entre s, por
ejemplo, dos cuadros de texto que se actualicen mutuamente.

Cuando se modifican los datos de un cuadro de texto o combinado con el teclado, se


producen eventos de teclado adems de los eventos de control, tales como Change. Por
ejemplo, si se sita en un nuevo registro y escribe un carcter ANSI en un cuadro de texto
del mismo, se producirn los eventos siguientes, en el orden indicado:
KeyDown KeyPress BeforeInsert Change KeyUp
Los eventos BeforeUpdate y AfterUpdate del control de cuadro de texto o cuadro
combinado se producen despus de introducir los datos nuevos o modificados en el control
y pasar a otro control (o despus de hacer clic en el comando Guardar registro del men
Registros), y, por tanto, despus de todos los eventos Change del control.
En los cuadros combinados para los que la propiedad LimitToList se establece en S, el
evento NotInList se produce despus de escribir un valor no incluido en la lista e intentar
pasar a otro control o guardar el registro. El evento ocurre despus de todos los eventos
Change del cuadro combinado. En este caso, no se producen los eventos BeforeUpdate y
AfterUpdate del cuadro combinado, ya que Microsoft Access no acepta un valor que no
est incluido en la lista.

Evento Click
El evento Click se produce cuando el usuario presiona y suelta un botn del mouse sobre un
objeto.

Comentarios

El evento Click se aplica slo a formularios, secciones de formularios y controles de


formularios, y no a los controles de los informes.
Este evento no se aplica a las casillas de verificacin, botones de opcin ni botones
de alternar de un grupo de opciones. Slo se aplica al grupo de opciones en s.
Este evento no se aplica a las etiquetas asociadas a otro control, como por ejemplo
un las de un cuadro de texto. Slo se aplica a las etiquetas "independientes". Hacer
clic en una etiqueta adjunta tiene el mismo efecto que hacerlo en el control
asociado. Se producirn los eventos normales para el control, y ninguno para la
etiqueta adjunta.
Este evento se aplica a un control que contiene un hipervnculo.

Para ejecutar una macro o un procedimiento de evento cuando se produzca este evento,
establezca en la propiedad AlHacerClic (OnClick) el nombre de la macro o
[Procedimiento de evento].

Pgina

129

En un formulario, este evento se produce cuando el usuario hace clic en una zona en blanco
o en selectores de registro en el formulario.
Para los controles, este evento se produce cuando el usuario realiza una de las siguientes
acciones:

Hacer clic en un control con el botn primario del mouse (ratn). Al hacer clic con
el botn secundario o central del mouse en un control, no se activa este evento.

Hacer clic con el botn primario del mouse en un control que contiene datos de
hipervnculo. Al hacer clic con el botn secundario o central del mouse no se activa
este evento. Cuando el usuario mueve el puntero del mouse encima de un control
que contiene datos de hipervnculo, el puntero se convierte en un icono que
representa una "mano". Cuando el usuario presiona el botn del mouse, se activa el
hipervnculo y se produce el evento Click.

Seleccionar un elemento de un cuadro combinado o de un cuadro de lista ya sea


presionando las teclas de flechas y luego ENTRAR o con el botn del mouse.

Presionar BARRA ESPACIADORA cuando el enfoque est en un botn de


comando, en una casilla de verificacin, en un botn de opcin o en un botn de
alternar.

Presionar la tecla ENTRAR en un formulario que tiene un botn de comando cuya


propiedad Predeterminado (Default) tiene el valor S.

Presionar la tecla ESC en un formulario que tiene un botn de comando cuya


propiedad Cancelar (Cancel) tiene el valor S.

Presionar la tecla de acceso de un control. Por ejemplo, si la propiedad Ttulo


(Caption) de un botn de comando est establecida en &Ir, se producir el evento
al presionar ALT+I.

Normalmente adjuntar una macro o procedimiento de evento Click a un botn de comando


con el fin de ejecutar comandos y acciones de tipo comando. Para el resto de los controles a
los que se aplica, puede emplear este evento para ejecutar acciones como respuesta a una de
las situaciones descritas anteriormente.
Slo para los botones de comando, Microsoft Access ejecutar la macro o procedimiento de
evento especificado en la propiedad AlHacerClic (OnClick) cuando el usuario elija el
botn de comando presionando la tecla ENTRAR o una tecla de acceso. La macro o
procedimiento de evento se ejecuta una vez. Si desea que se ejecute repetidamente mientras
est presionado el botn de comando, establezca a S la propiedad RepeticinAutomtica
(AutoRepeat) del botn. Para los dems tipos de controles, deber hacer clic con el botn
del mouse para que se produzca el evento Click.

Pgina

130

El evento Click se produce para un botn de comando en el momento de elegirlo. Adems,


si el botn no tiene ya el enfoque cuando se elige, se producirn los eventos Enter y
GotFocus para el mismo antes del evento Click.
Al hacer doble clic en un control se producen los eventos DblClick y Click. Para los
botones de comando, al hacer doble clic se producen los eventos siguientes, en el orden
indicado:
MouseDown MouseUp Click DblClick Click
Puede utilizar la accin CancelarEvento en una macro con DblClick para cancelar el
segundo evento Click. Para obtener ms informacin, consulte el tema del evento DblClick.
El evento Click se produce para un grupo de opciones despus de cambiar el valor de
alguno de los controles que contiene haciendo clic en l. Por ejemplo, al hacer clic en un
botn de alternar, en un botn de opcin o en una casilla de verificacin de un grupo de
opciones, el evento Click se produce para el grupo de opciones despus de los eventos
BeforeUpdate y AfterUpdate del grupo.
Sugerencia Para distinguir entre los botones primario, secundario y central del mouse, use
los eventos MouseDown y MouseUp.

Evento Close
El evento Close se produce cuando un formulario o informe se cierra y se retira de la
pantalla.

Comentarios
Para ejecutar una macro o un procedimiento de evento cuando se produzca este evento,
establezca la propiedad AlCerrar (OnClose) en el nombre de la macro o en [Event
Procedure].
El evento Close se produce despus del evento Unload, que se activa despus de cerrar el
formulario pero antes de que desaparezca de la pantalla.
Al cerrar un formulario, se producen los eventos siguientes, en el orden indicado:
Unload Deactivate Close
Cuando se produzca el evento Close puede abrir otra ventana o solicitar el nombre del
usuario para crear una entrada de registro que indique quin ha utilizado el formulario o
informe.
El evento Unload puede cancelarse, pero no as el evento Close.

Evento CommandBeforeExecute
Ocurre antes de que se ejecute un comando especificado. Utilice este evento cuando desee
imponer algunas restricciones antes de que se ejecute un comando en particular.

Pgina

131

Private Sub Form_CommandBeforeExecute(ByVal Comando As Variant, ByVal


Cancelar As Object)
Comando Comando que se va a ejecutar.
Cancelar Establezca la propiedad Value de este objeto en Verdadero para cancelar este
comando.

Comentarios
Las constantes OCCommandId, ChartCommandIdEnum y PivotCommandId
contienen listas de comandos permitidos para cada componente Web de Microsoft Office.

Ejemplo
El ejemplo siguiente muestra la sintaxis de una subrutina que intercepta el evento
CommandBeforeExecute.
Private Sub Form_CommandBeforeExecute( _
ByVal Command As Variant, ByVal Cancel As Object)
Dim intResponse As Integer
Dim strPrompt As String
strPrompt = "Cancel the command?"
intResponse = MsgBox(strPrompt, vbYesNo)
If intResponse = vbYes Then
Cancel.Value = True
Else
Cancel.Value = False
End If
End Sub

Evento CommandChecked
Ocurre cuando el componente Web de Microsoft Office especificado determina si se activa
el comando indicado.
Private Sub Form_CommandChecked(ByVal Comando As Variant, ByVal Activado
As Object)
Comando Comando que se ha comprobado y est activado.
Activado Establezca la propiedad Value de este objeto en Falso para desactivar este
comando.

Pgina

132

Comentarios
Las constantes OCCommandId, ChartCommandIdEnum y
contienen listas de comandos permitidos para cada componente Web.

PivotCommandId

Ejemplo
El ejemplo siguiente muestra la sintaxis de una subrutina que intercepta el evento
CommandChecked.
Private Sub Form_CommandChecked( _
ByVal Command As Variant, ByVal Checked As Object)
Dim intResponse As Integer
Dim strPrompt As String
strPrompt = "Uncheck the command?"
intResponse = MsgBox(strPrompt, vbYesNo)
If intResponse = vbYes Then
Checked.Value = False
Else
Checked.Value = True
End If
End Sub

Evento CommandEnabled
Ocurre cuando el componente Web de Microsoft Office especificado determina si se
habilita el comando indicado.
Private Sub Form_CommandEnabled(ByVal Comando As Variant, ByVal Habilitado
As Object)
Comando Comando que se ha comprobado y est habilitado.
Habilitado Establezca la propiedad Value de este objeto en Falso para deshabilitar este
comando.
Comentarios
Las constantes OCCommandId, ChartCommandIdEnum y PivotCommandId
contienen listas de comandos permitidos para cada componente Web.

Ejemplo
Pgina

133

El ejemplo siguiente muestra la sintaxis de una subrutina que intercepta el evento


CommandEnabled.
Private Sub Form_CommandEnabled( _
ByVal Command As Variant, ByVal Enabled As Object)
Dim intResponse As Integer
Dim strPrompt As String
strPrompt = "Disable the command?"
intResponse = MsgBox(strPrompt, vbYesNo)
If intResponse = vbYes Then
Enabled.Value = False
Else
Enabled.Value = True
End If
End Sub

Evento CommandExecute
Ocurre despus de que se ejecute un comando especificado. Utilice este evento cuando
desee ejecutar un conjunto de comandos despus de que se ejecute un comando en
particular.
Private Sub Form_CommandBeforeExecute(ByVal Comando As Variant)
Comando Comando que se ejecuta.

Comentarios
Las constantes OCCommandId, ChartCommandIdEnum y PivotCommandId
contienen listas de comandos permitidos para cada componente Web de Microsoft Office.

Ejemplo
El ejemplo siguiente muestra la sintaxis de una subrutina que intercepta el evento
CommandExecute.
Private Sub Form_CommandExecute(ByVal Command As Variant)
MsgBox "The command specified by " _
& Command.Name & " has been executed."
End Sub

Evento Current
Pgina

134

El evento Current se produce cuando el enfoque se sita en un registro, haciendo que sea el
registro actual, o cuando el formulario se actualiza o se realiza para l una nueva consulta.

Comentarios
Para ejecutar una macro o procedimiento de evento cuando se produzca este evento,
establezca la propiedad AlActivarRegistro (OnCurrent) al nombre de la macro o a
[Procedimiento de evento].
Este evento se produce al abrir un formulario y tambin siempre que el enfoque deja un
registro y pasa a otro. Microsoft Access ejecuta la macro o procedimiento de evento
Current antes de que aparezca el primer registro (o el siguiente).
Mediante la ejecucin de una macro o procedimiento de evento cuando se produce el
evento Current de un formulario puede, por ejemplo, mostrar un mensaje o sincronizar los
registros de otro formulario relacionado con el registro activo. Por ejemplo, cuando el
registro de un cliente es el registro activo, puede mostrar su pedido anterior. Cuando el
registro de un proveedor sea el activo, puede mostrar los productos que fabrica en el
formulario Proveedores. Tambin puede realizar clculos basndose en el registro actual o
cambiar la forma de responder a los datos del mismo.
Si la macro o procedimiento de evento ejecuta una accin IrAControl o IrARegistro o el
mtodo correspondiente (GoToControl o GoToRecord) del objeto DoCmd como respuesta
a un evento Open, se producir el evento Current.
El evento Current tambin se produce cuando se actualiza un formulario o se realiza una
nueva consulta en la tabla o consulta base de ste. Por ejemplo, esto ocurre al hacer clic en
Quitar filtro u ordenar en el men Registros, o al usar la accin NuevaConsulta en una
macro o el mtodo Requery en el cdigo de Visual Basic.
La primera vez que se abre un formulario, se producen los eventos siguientes, en el orden
indicado:
Open Load Resize Activate Current

Evento Enter
El evento Enter se produce antes de que un control reciba efectivamente el enfoque
proveniente de otro control del mismo formulario.

Comentarios

Pgina

135

El evento Enter slo se aplica a los controles de formularios y no a los de informes. Este
evento no se aplica a las casillas de verificacin, a los botones de opcin ni a los botones de
alternar de un grupo de opciones. Slo se aplica al grupo de opciones en s.
Para ejecutar una macro o procedimiento de evento cuando se produzcan estos eventos,
establezca la propiedad AlEntrar (OnEnter) o AlSalir (OnExit) al nombre de la macro o
a [Procedimiento de evento].
Como el evento Enter se produce antes de que el enfoque se traslade al control, puede
utilizar una macro o procedimiento de evento asociado a este evento para mostrar
instrucciones. Por ejemplo, podra presentar un pequeo formulario o cuadro de mensaje
que identifique el tipo de datos que contiene normalmente el control o que d instrucciones
sobre la forma de usarlo.
El evento Enter se produce antes del evento GotFocus. El evento Exit se produce antes del
evento LostFocus.
A diferencia de los eventos GotFocus y LostFocus, Enter y Exit no se producen cuando un
formulario recibe o pierde el enfoque. Por ejemplo, suponga que selecciona una casilla de
verificacin de un formulario y que luego hace clic en un informe. Al seleccionar la casilla
se producirn los eventos Enter y GotFocus. Sin embargo, al hacer clic en el informe, slo
se producir el evento LostFocus. El evento Exit no se produce (porque el enfoque se
traslada a una ventana distinta). Si selecciona de nuevo la casilla de verificacin del
formulario para traerlo al frente, se producir el evento GotFocus, pero no el evento Enter
(porque el control tena el enfoque la ltima vez que el formulario estuvo activo). El evento
Exit slo se produce al hacer clic en otro control del mismo formulario.
Si desplaza el enfoque a un control de un formulario que no lo tena previamente, los
eventos Exit y LostFocus del control que tena el enfoque se producen antes que los eventos
Enter y GotFocus del control que lo recibe.
Si utiliza el mouse para mover el enfoque de un control de un formulario principal a otro de
un subformulario del mismo (que no tenga ya el enfoque en el subformulario), se
producirn los eventos siguientes:
Exit (para el control del formulario principal)

LostFocus (para el control del formulario principal)

Enter (para el control subformulario)

Exit (para el control del subformulario que tena el enfoque)

Pgina

136


LostFocus (para el control del subformulario que tena el enfoque)

Enter (para el control del subformulario al que se mueve el enfoque)

GotFocus (para el control del subformulario al que se mueve el enfoque)


Si el control del subformulario elegido tena ya el enfoque, no se producen sus eventos
Enter ni GotFocus, aunque s ocurre el evento Enter para el control subformulario. Si
desplaza el enfoque de un control de un subformulario a un control del formulario
principal, no se producirn los eventos Exit y LostFocus del control del subformulario, sino
slo el evento Exit para el control subformulario y los eventos Enter y GotFocus para el
control del formulario principal.
Nota A menudo se usa el mouse o una tecla como TAB para trasladar el enfoque a otro
control. Esto hace que se produzcan eventos de mouse o de teclado, adems de los eventos
tratados en este tema.

Ejemplo
En el ejemplo siguiente, se asocian dos procedimientos de evento al cuadro de texto
LastName. El procedimiento de evento Enter muestra un mensaje donde se especifica qu
tipo de datos puede escribir el usuario en el cuadro de texto. El procedimiento de evento
Exit muestra un cuadro de dilogo que pregunta al usuario si desea guardar los cambios
antes de desplazar el enfoque a otro control. Si el usuario hace clic en el botn Cancelar, el
argumento Cancel se establece en True (-1), lo que desplaza el enfoque al cuadro de texto
sin guardar los cambios. Si el usuario elige el botn Aceptar, los cambios se guardan y el
enfoque pasa a otro control.
Para probar el ejemplo, agregue el procedimiento de evento siguiente a un formulario que
contenga un cuadro de texto denominado Apellidos.
Private Sub LastName_Enter()
MsgBox "Enter your last name."
End Sub
Private Sub LastName_Exit(Cancel As Integer)
Dim strMsg As String
strMsg = "You entered '" & Me!LastName _
& "' as your last name." & _
vbCrLf & "Is this correct?"
If MsgBox(strMsg, vbYesNo) = vbNo Then
Cancel = True
' Cancel exit.
Pgina

137

Else
Exit Sub
End If
End Sub

' Save changes and exit.

Evento Error
El evento Error se genera cuando se produce un error en tiempo de ejecucin en Microsoft
Access mientras un formulario o informe tiene el enfoque.

Comentarios
Aqu se incluyen los errores del motor de base de datos Microsoft Jet, pero no los errores en
tiempo de ejecucin de Visual Basic.
Para ejecutar una macro o procedimiento de evento cuando se produzca este evento,
establezca la propiedad AlOcurrirError (OnError) al nombre de la macro o a
[Procedimiento de evento].
Ejecutando un procedimiento de evento o una macro cuando se produce un evento Error,
puede interceptar un mensaje de error de Microsoft Access y mostrar un mensaje
personalizado que tenga un significado ms acorde con la aplicacin.

Evento Exit
El evento Exit se produce inmediatamente antes de que un control pierda el enfoque en
favor de otro control del mismo formulario.

Comentarios
El evento Exit slo se aplica a los controles de formularios y no a los de informes. Este
evento no se aplica a las casillas de verificacin, a los botones de opcin ni a los botones de
alternar de un grupo de opciones. Slo se aplica al grupo de opciones en s.
Para ejecutar una macro o un procedimiento de evento cuando se produzca este evento,
establezca la propiedad OnExit (AlSalir) en el nombre de la macro o en [Event Procedure].
Como el evento Enter se produce antes de que el enfoque se traslade al control, puede
utilizar una macro o procedimiento de evento asociado a este evento para mostrar
instrucciones. Por ejemplo, podra presentar un pequeo formulario o cuadro de mensaje
que identifique el tipo de datos que contiene normalmente el control o que d instrucciones
sobre la forma de usarlo.

Pgina

138

El evento Exit se produce antes del evento LostFocus.


A diferencia del evento LostFocus, el evento Exit no se produce cuando un formulario
pierde el enfoque. Por ejemplo, suponga que selecciona una casilla de verificacin de un
formulario y que luego hace clic en un informe. Al seleccionar la casilla se producirn los
eventos Enter y GotFocus. Sin embargo, al hacer clic en el informe, slo se producir el
evento LostFocus. El evento Exit no se produce (porque el enfoque se traslada a una
ventana distinta). Si selecciona de nuevo la casilla de verificacin del formulario para
traerlo al frente, se producir el evento GotFocus, pero no el evento Enter (porque el
control tena el enfoque la ltima vez que el formulario estuvo activo). El evento Exit slo
se produce al hacer clic en otro control del mismo formulario.
Si desplaza el enfoque a un control de un formulario que no lo tena previamente, los
eventos Exit y LostFocus del control que tena el enfoque se producen antes que los eventos
Enter y GotFocus del control que lo recibe.
Si utiliza el mouse para mover el enfoque de un control de un formulario principal a otro de
un subformulario del mismo (que no tenga ya el enfoque en el subformulario), se
producirn los eventos siguientes:
Exit (para el control del formulario principal)

LostFocus (para el control del formulario principal)

Enter (para el control subformulario)

Exit (para el control del subformulario que tena el enfoque)

LostFocus (para el control del subformulario que tena el enfoque)

Enter (para el control del subformulario al que se mueve el enfoque)

GotFocus (para el control del subformulario al que se mueve el enfoque)


Si el control del subformulario elegido tena ya el enfoque, no se producen sus eventos
Enter ni GotFocus, aunque s ocurre el evento Enter para el control subformulario. Si
desplaza el enfoque de un control de un subformulario a un control del formulario
principal, no se producirn los eventos Exit y LostFocus del control del subformulario, sino

Pgina

139

slo el evento Exit para el control subformulario y los eventos Enter y GotFocus para el
control del formulario principal.
Nota A menudo se usa el mouse o una tecla como TAB para trasladar el enfoque a otro
control. Esto hace que se produzcan eventos de mouse o de teclado, adems de los eventos
tratados en este tema.

Ejemplo
En el ejemplo siguiente, se asocian dos procedimientos de evento al cuadro de texto
LastName. El procedimiento de evento Enter muestra un mensaje donde se especifica qu
tipo de datos puede escribir el usuario en el cuadro de texto. El procedimiento de evento
Exit muestra un cuadro de dilogo que pregunta al usuario si desea guardar los cambios
antes de desplazar el enfoque a otro control. Si el usuario hace clic en el botn Cancelar, el
argumento Cancel se establece en Verdadero, lo que desplaza el enfoque al cuadro de
texto sin guardar los cambios. Si el usuario elige el botn Aceptar, los cambios se guardan
y el enfoque pasa a otro control.
Para probar el ejemplo, agregue el procedimiento de evento siguiente a un formulario que
contenga un cuadro de texto denominado Apellidos.
Private Sub LastName_Enter()
MsgBox "Enter your last name."
End Sub
Private Sub LastName_Exit(Cancel As Integer)
Dim strMsg As String
strMsg = "You entered '" & Me!LastName _
& "' as your last name." & _
vbCrLf & "Is this correct?"
If MsgBox(strMsg, vbYesNo) = vbNo Then
Cancel = True
' Cancel exit.
Else
Exit Sub
' Save changes and exit.
End If
End Sub

Evento Filter
El evento Filter puede ocurrir en un proyecto de Microsoft Access (.ADP) o en una base de
datos de Access (.MDB).
En una base de datos de Access, un evento Filter se produce cuando el usuario hace una de
las acciones siguientes:

En el men Registros en la vista Formulario, selecciona Filtro y, a continuacin,


hace clic en Filtro por formulario, o hace clic en Filtro por formulario

Pgina

en la

140

barra de herramientas. Esto abre la ventana Filtro por formulario, en la que puede
crear un filtro basado en los campos del formulario.
En el men Registros de la vista Formulario, apunta a Filtro y luego hace clic en
Filtro u orden avanzado. De esta forma se abre la ventana Filtro u orden avanzado,
donde se pueden crear filtros complejos para el formulario.
Hace clic en Filtro u orden avanzado en el men Filtro mientras est abierta la
ventana Filtro por formulario o hace clic en Filtro por formulario en el men
Filtro mientras est abierta la ventana Filtro u orden avanzado. De esta forma se
produce el evento ApplyFilter al cerrar la ventana de filtro abierta y luego se
produce el evento Filter al abrir la otra ventana de filtro.

Dentro de un proyecto de Access, ocurre un evento Filter cuando el usuario realiza una de
las siguientes acciones:

En el men Registros en la vista Formulario, selecciona Filtro y, a continuacin,

hace clic en Filtro por formulario, o en Filtro por formulario


en la barra de
herramientas. Esto abre la ventana Filtro por formulario, en la que puede crear un
filtro basado en los campos del formulario.
En el men Registros en la vista Formulario, selecciona Filtro y, a continuacin,

hace clic en Filtro de servidor por formulario


en la barra de herramientas.
Esto abre la ventana Filtro de servidor por formulario en la que puede crear
rpidamente un filtro basado en los campos del formulario.
La ventana Filtro u orden avanzado no est disponible en un proyecto de Access.

Comentarios
Para ejecutar una macro o procedimiento de evento cuando se produce este evento,
establezca la propiedad AlFiltrar (OnFilter) al nombre de la macro o [Procedimiento de
evento].
El evento Filter se puede utilizar para:
Quitar cualquier filtro anterior del formulario. Para ello, establezca la propiedad Filtro
(Filter) o FiltroServidor (ServerFilter) del formulario en una cadena de longitud cero ("
") en la macro o el procedimiento de evento del filtro. Este mtodo es especialmente til
cuando se desea asegurar que no van a aparecer criterios extraos en el nuevo filtro. Por
ejemplo, siempre que se utiliza la caracterstica Filtro por seleccin, el criterio que se usa
(el texto seleccionado en el formulario) se agrega a la expresin de la clusula WHERE de
la propiedad Filtro (Filter) o FiltroDeServidor (ServerFilter) y aparece en las ventanas
Filtro por formulario y Filtro u orden avanzado, o en la ventana Filtro de servidor por
formulario. Estos criterios antiguos se pueden eliminar utilizando el evento Filter.

Introducir valores predeterminados para el filtro nuevo. Para hacerlo, establezca la


propiedad Filtro (Filter) o FiltroDeServidor (ServerFilter) a incluir estos
criterios. Por ejemplo, quizs se desee que todos los filtros de un formulario

Pgina

141

Productos muestren slo los productos actuales (productos para los que no est
seleccionado el control Discontinuado del formulario Productos).
Utilizar una ventana de filtro personalizada en lugar de una de las ventanas de filtro
de Microsoft Access. Cuando se produce el evento Filter, se puede abrir el
formulario personalizado y utilizar las entradas de este formulario para establecer la
propiedad Filtro (Filter) o FiltroDeServidor (ServerFilter) y filtrar el formulario
original. Cuando el usuario cierre este formulario personalizado, establezca la
propiedad FilterOn o FiltroDeServidorPorFormulario (ServerFilterByForm)
del formulario original en True (-1) para aplicar el filtro. Cancelar el evento Filter
evita que se abra la ventana de filtro de Microsoft Access.
Evitar que aparezcan o se utilicen ciertos controles del formulario en la ventana
Filtro por formulario o Filtro de servidor por formulario. Si se oculta o deshabilita
un control en una macro o procedimiento de evento de filtro, el control queda oculto
o deshabilitado en la ventana Filtro por formulario o Filtro de servidor por
formulario y no se puede utilizar para establecer criterios de filtro. Luego se puede
utilizar el evento ApplyFilter para mostrar o habilitar este control despus de aplicar
el filtro o cuando el filtro se quita del formulario.

Evento Format
El evento Format se produce cuando Microsoft Access determina qu datos pertenecen a
una seccin de un informe, pero antes de que Microsoft Access d formato a la seccin para
su vista previa o su impresin.

Comentarios
Para ejecutar una macro o procedimiento de evento cuando se produzca este evento,
establezca la propiedad AlDarFormato (OnFormat) al nombre de la macro o
[Procedimiento de evento].
Para cada seccin de un informe se produce un evento Format. Esto permite relaizar
clculos complejos en cada momento usando datos de cada seccin, incluidas las que no se
imprimen.
En el caso de las secciones de detalle de los informes, el evento Format se produce para
cada registro de la seccin inmediatamente antes de que Microsoft Access d formato a los
datos del registro. Una macro o procedimiento de evento Format tiene acceso a los datos
del registro actual.
En el caso de los encabezados de grupo de los informes, el evento Format se produce para
cada nuevo grupo, y una macro o un procedimiento de evento Format tiene acceso a los
datos del encabezado de grupo y a los datos del primer registro de la seccin de detalle. En
el caso de los pies de grupo de los informes, el evento Format se produce para cada nuevo
grupo, y una macro o un procedimiento de evento Format tiene acceso a los datos del pie de
grupo y a los del ltimo registro de la seccin de detalle.
Mediante la ejecucin de una macro o procedimiento de evento cuando se produce el
evento Format puede, por ejemplo, usar los datos del registro actual para realizar cambios
en el informe que afecten al diseo de la pgina. Por ejemplo, puede mostrar u ocultar un

Pgina

142

mensaje de felicitacin junto a las ventas mensuales de un comercial, dependiendo del total
de las mismas. Despus de mostrar u ocultar el mensaje, Microsoft Access dar formato a
la seccin con los valores de las propiedades de formato, como son Autoextensible
(CanGrow), Autocomprimible (CanShrink), OcultarDuplicados (HideDuplicates),
MantenerJuntos (KeepTogether) y Visible.
En el caso de cambios que no afecten al diseo de la pgina, o cuando los procedimientos
de evento o macros slo deban ejecutarse despus de que los datos de la pgina tengan
formato (por ejemplo, una macro que imprima los totales de la pgina), use el evento Print
de la seccin del informe.
En ocasiones, Microsoft Access debe volver a secciones anteriores de un informe para dar
formato en varias pasadas. Cuando esto ocurre, el evento Retreat se produce al volver a una
seccin anterior y el evento Format se produce ms de una vez por seccin. Puede ejecutar
una macro o procedimiento de evento cuando se produzca el evento Retreat para deshacer
los cambios realizados al producirse el evento Format en esa seccin. Esto es til cuando la
macro o procedimiento de evento ejecuta acciones que slo deban realizarse una vez en
cada seccin, como calcular totales de pgina o controlar el tamao de la seccin.

Evento GotFocus
El evento GotFocus se produce cuando un formulario o control recibe el enfoque.

Comentarios
Nota El evento GotFocus se aplica slo a formularios y controles de formularios, y no a
los controles de informes.
Para ejecutar una macro o un procedimiento de evento cuando se produzcan estos eventos,
establezca la propiedad AlRecibirEnfoque (OnGotFocus) en el nombre de la macro o en
[Event Procedure].
Estos eventos se producen cuando el enfoque se desplaza como respuesta a una accin del
usuario, como presionar la tecla TAB o hacer clic en el objeto; o cuando se usa el mtodo
SetFocus en Visual Basic o las acciones SeleccionarObjeto, IrARegistro, IrAControl o
IrAPgina en una macro.
Un control slo puede recibir el enfoque cuando en sus propiedades Visible y Activado
(Enabled) tiene establecido S. Un formulario slo podr recibir el enfoque cuando no
contenga controles, o cuando todos sus controles visibles estn deshabilitados. Si un
formulario contiene algn control visible y activado, el evento GotFocus no puede
producirse para l.
Puede especificar lo que debe ocurrir cuando un formulario o control reciba el enfoque
ejecutando una macro o procedimiento de evento GotFocus. Por ejemplo, asociando un
procedimiento de evento GotFocus a cada control de un formulario, puede guiar al usuario
por la aplicacin mostrando breves instrucciones o mensajes en un cuadro de texto.

Pgina

143

Tambin puede dar pistas visuales habilitando, deshabilitando o mostrando controles que
dependan del control que tenga el enfoque.
Nota Para personalizar el orden en que el enfoque pasa de control a control en un
formulario cuando se presiona la tecla TAB, establezca el orden de tabulacin o especifique
teclas de acceso para los controles.
El evento GotFocus se diferencia del evento Enter en que el primero se produce cada vez
que un control recibe el enfoque. Por ejemplo, suponga que el usuario hace clic en una
casilla de verificacin de un formulario, que luego haga clic en un informe y que por ltimo
hace clic de nuevo en la casilla del formulario para traerlo a primer plano. El evento
GotFocus se produce las dos veces que la casilla de verificacin recibe el enfoque. Por el
contrario, el evento Enter slo se produce la primera vez que el usuario hace clic en la
casilla de verificacin. El evento GotFocus se produce despus del evento Enter.
Si desplaza el enfoque a un control de un formulario que no lo tena previamente, los
eventos Exit y LostFocus del control que tena el enfoque se producen antes que los eventos
Enter y GotFocus del control que lo recibe.
Si usa el mouse para desplazar el enfoque de un control de un formulario principal a un
control de un subformulario del mismo, se producirn los siguientes eventos:
Exit (para el control del formulario principal)

LostFocus (para el control del formulario principal)

Enter (para el control subformulario)

Exit (para el control del subformulario que tena el enfoque)

LostFocus (para el control del subformulario que tena el enfoque)

Enter (para el control del subformulario al que se mueve el enfoque)

GotFocus (para el control del subformulario al que se mueve el enfoque)

Pgina

144

Si el control del subformulario elegido tena ya el enfoque, no se producen sus eventos


Enter ni GotFocus, aunque s ocurre el evento Enter para el control subformulario. Si
desplaza el enfoque de un control de un subformulario a un control del formulario
principal, no se producirn los eventos Exit y LostFocus del control del subformulario, sino
slo el evento Exit para el control subformulario y los eventos Enter y GotFocus para el
control del formulario principal.
Nota A menudo se usa el mouse o una tecla como TAB para trasladar el enfoque a otro
control. Esto hace que se produzcan eventos de mouse o de teclado, adems de los eventos
tratados en este tema.
Al alternar entre dos formularios abiertos, el evento Deactivate se produce para el primer
formulario, y el evento Activate para el segundo. Si los formularios no contienen ningn
control visible y habilitado, se producir el evento LostFocus para el primer formulario
antes del evento Deactivate, y el evento GotFocus para el segundo despus del evento
Activate.

Ejemplo
En el ejemplo siguiente se muestra un mensaje en una etiqueta cuando el enfoque llega a un
botn de opcin.
Para probar el ejemplo, agregue los siguientes procedimientos de evento a un formulario
llamado Contactos que contenga un botn de opcin llamado OpcinS y una etiqueta
llamada EtiquetaS.
Private Sub OptionYes_GotFocus()
Me!LabelYes.Caption = "Option button 'Yes' has the
focus."
End Sub
Private Sub OptionYes_LostFocus()
Me!LabelYes.Caption = ""
End Sub

' Clear caption.

Evento ItemAdded
Es posible que parte del contenido de este tema no sea aplicable a algunos idiomas.
El evento ItemAdded se produce cuando se agrega una referencia al proyecto desde Visual
Basic.

Comentarios

El evento ItemAdded se aplica a la coleccin References. No est asociado con un


control, formulario o informe, como lo estn la mayora de los dems eventos. Por
tanto, para poder crear una definicin de procedimiento para el procedimiento de
evento ItemAdded debe usar una sintaxis especial.

Pgina

145

El evento ItemAdded slo puede ejecutar un procedimiento de evento cuando se


produce, pero no puede ejecutar una macro.

Este evento slo se produce cuando se agrega una referencia desde el cdigo. No se
produce cuando se agrega una referencia desde el cuadro de dilogo Referencias,
disponible al hacer clic en Referencias en el men Herramientas cuando la ventana
Mdulo es la ventana activa.

Ejemplo
El siguiente ejemplo incluye procedimientos de evento para los eventos ItemAdded y
ItemRemoved. Para probar este ejemplo, cree primero un nuevo mdulo de clase haciendo
clic en Mdulo de clase en el men Insertar. Pegue el siguiente cdigo en el mdulo de
clase y guarde el mdulo como RefEvents:
' Declare object variable to represent References collection.
Public WithEvents evtReferences As References
' When instance of class is created, initialize evtReferences
' variable.
Private Sub Class_Initialize()
Set evtReferences = Application.References
End Sub
' When instance is removed, set evtReferences to Nothing.
Private Sub Class_Terminate()
Set evtReferences = Nothing
End Sub
' Display message when reference is added.
Private Sub evtReferences_ItemAdded(ByVal Reference As _
Access.Reference)
MsgBox "Reference to " & Reference.Name & " added."
End Sub
' Display message when reference is removed.
Private Sub evtReferences_ItemRemoved(ByVal Reference As _
Access.Reference)
MsgBox "Reference to " & Reference.Name & " removed."
End Sub
El siguiente procedimiento Function agrega una referencia determinada. Cuando se agrega
una referencia, se ejecuta el procedimiento de evento ItemAdded definido en la clase
RefEvents.
Pgina

146

Por ejemplo, para establecer una referencia al control Calendar, podra pasar la cadena
"C:\Windows\System\Mscal.ocx", si es sta la ubicacin correcta del control Calendar en
su equipo.
' Create new instance of RefEvents class.
Dim objRefEvents As New RefEvents
' Pass file name and path of type library to this procedure.
Function AddReference(strFileName As String) As Boolean
Dim ref As Reference
On Error GoTo Error_AddReference
' Create new reference on References object variable.
Set ref = objRefEvents.evtReferences.AddFromFile(strFileName)
AddReference = True
Exit_AddReference:
Exit Function
Error_AddReference:
MsgBox Err & ": " & Err.Description
AddReference = False
Resume Exit_AddReference
End Function

Evento ItemRemoved
Es posible que parte del contenido de este tema no sea aplicable a algunos idiomas.
El evento ItemRemoved se produce cuando se elimina una referencia del proyecto.

Comentarios

El evento ItemRemoved se aplica a la coleccin References. No est asociado con


un control, formulario o informe, como lo estn la mayora de los dems eventos.
Por tanto, para poder crear una definicin de procedimiento para el procedimiento
de evento ItemRemoved, debe usar una sintaxis especial.
El evento ItemRemoved slo puede ejecutar un procedimiento de evento cuando se
produce, no puede ejecutar una macro.

Este evento slo se produce cuando se elimina una referencia del cdigo. No se produce
cuando se quita una referencia desde el cuadro de dilogo Referencias, disponible al hacer
clic en Referencias en el men Herramientas cuando la ventana Mdulo es la ventana
activa.

Ejemplo
Pgina

147

El siguiente ejemplo incluye procedimientos de evento para los eventos ItemAdded y


ItemRemoved. Para probar este ejemplo, cree primero un nuevo mdulo de clase haciendo
clic en Mdulo de clase en el men Insertar. Pegue el siguiente cdigo en el mdulo de
clase y guarde el mdulo como RefEvents:
' Declare object variable to represent References collection.
Public WithEvents evtReferences As References
' When instance of class is created, initialize evtReferences
' variable.
Private Sub Class_Initialize()
Set evtReferences = Application.References
End Sub
' When instance is removed, set evtReferences to Nothing.
Private Sub Class_Terminate()
Set evtReferences = Nothing
End Sub
' Display message when reference is added.
Private Sub evtReferences_ItemAdded(ByVal Reference As _
Access.Reference)
MsgBox "Reference to " & Reference.Name & " added."
End Sub
' Display message when reference is removed.
Private Sub evtReferences_ItemRemoved(ByVal Reference As _
Access.Reference)
MsgBox "Reference to " & Reference.Name & " removed."
End Sub
El siguiente procedimiento Function elimina una referencia determinada. Cuando se
elimina una referencia, se ejecuta el procedimiento de evento ItemRemoved definido en la
clase RefEvents.
Por ejemplo, para quitar una referencia al control Calendar, podra pasar la cadena
"MSACAL", que es el nombre del objeto Reference que representa al control Calendar.
Function RemoveReference(strRefName As String) As Boolean
Dim ref As Reference
On Error GoTo Error_RemoveReference
' Return object representing existing reference.
Set ref = objRefEvents.evtReferences(strRefName)
' Remove reference from collection.
objRefEvents.evtReferences.Remove ref
RemoveReference = True
Exit_RemoveReference:
Exit Function
Pgina

148

Error_RemoveReference:
MsgBox Err & ": " & Err.Description
RemoveReference = False
Resume Exit_RemoveReference
End Function

Evento KeyDown
El evento KeyDown se produce cuando el usuario presiona una tecla mientras un
formulario o control tiene el enfoque. Este evento se produce tambin cuando se enva una
pulsacin de tecla a un formulario o control con la accin EnviarTeclas en una macro o con
la instruccin SendKeys en Visual Basic.

Comentarios
Nota El evento KeyDown se aplica slo a formularios y controles de formularios, y no a
los controles de informes.
Para ejecutar una macro o un procedimiento de evento cuando se produzcan estos eventos,
establezca la propiedad AlBajarTecla (OnKeyDown) en el nombre de la macro o en
[Event Procedure].
En ambos eventos, el objeto que tenga el enfoque recibe todas las pulsaciones de teclas. Un
formulario slo puede tener el enfoque si no contiene controles, o si todos sus controles
visibles estn deshabilitados.
Un formulario recibir tambin todos los eventos de teclado, incluso los que se produzcan
para sus controles, si se establece S en su propiedad TeclaDePresentacinPreliminar
(KeyPreview). De esta forma, todos los eventos de teclado se producirn primero para el
formulario y luego para el control que tenga el enfoque. As puede responder a teclas
especficas presionadas en el formulario, independientemente del control que tenga el
enfoque. Por ejemplo, puede ser conveniente que la combinacin de teclas CTRL+X realice
siempre la misma accin en un formulario.
Si mantiene presionada una tecla, los eventos KeyDown y KeyPress se alternarn
repetidamente (KeyDown, KeyPress, KeyDown, KeyPress, etctera) hasta que suelte la
tecla, momento en que se producir el evento KeyUp.
Aunque el evento KeyDown se produce al presionar la mayora de las teclas, normalmente
se utiliza para reconocer o distinguir:

Teclas de caracteres extendidos, como por ejemplo las teclas de funcin.


Teclas de desplazamiento como INICIO, FIN, RE PG, AV PG, FLECHA
ARRIBA, FLECHA ABAJO, FLECHA DERECHA, FLECHA IZQUIERDA y
TAB.
Combinaciones de teclas y modificadores estndar del teclado (teclas
MAYSCULAS, CTRL o ALT).

Pgina

149

Teclado numrico y teclas de nmero ordinarias.

El evento KeyDown no se produce al presionar:

La tecla ENTRAR si el formulario tiene un botn de comando cuya propiedad


Predeterminado (Default) tiene el valor S.
La tecla ESC si el formulario tiene un botn de comando cuya propiedad Cancelar
(Cancel) tiene el valor S.

Sugerencia Para averiguar el carcter ANSI que corresponde a la tecla presionada, use el
evento KeyPress.
El evento KeyDown se produce al presionar o enviar una tecla ANSI. El evento KeyUp se
produce despus de cualquier otro para el control producido al presionar o enviar la tecla.
Si una pulsacin de tecla hace que el enfoque se traslade de un control a otro, el evento
KeyDown se producir para el primer control, mientras que los eventos KeyPress y KeyUp
se producirn para el segundo.
Si desea ms informacin, vea el Orden de los eventos de pulsaciones de teclas y clics del
mouse.
Si se muestra un cuadro de dilogo modal como resultado de presionar o enviar una tecla,
se producirn los eventos KeyDown y KeyPress, pero no el evento KeyUp.

Ejemplo
En el ejemplo siguiente se determina si se ha presionado la tecla MAYSCULAS, CTRL o
ALT.
Para probar el ejemplo, agregue el procedimiento de evento siguiente a un formulario que
contenga un cuadro de texto llamado ControladorTeclado.
Private Sub KeyHandler_KeyDown(KeyCode As Integer, _
Shift As Integer)
Dim intShiftDown As Integer, intAltDown As Integer
Dim intCtrlDown As Integer
' Use bit masks to determine which key was pressed.
intShiftDown = (Shift And acShiftMask) > 0
intAltDown = (Shift And acAltMask) > 0
intCtrlDown = (Shift And acCtrlMask) > 0
' Display message telling user which key was pressed.
If intShiftDown Then MsgBox "You pressed the SHIFT key."
If intAltDown Then MsgBox "You pressed the ALT key."
If intCtrlDown Then MsgBox "You pressed the CTRL key."
End Sub

Evento KeyPress
Pgina

150

El evento KeyPress se produce cuando el usuario presiona y suelta una tecla o una
combinacin de teclas que corresponda a un cdigo ANSI mientras un formulario o control
tiene el enfoque. Este evento tambin se produce al enviar una pulsacin de tecla ANSI a
un formulario o control con la accin EnviarTeclas en una macro o la instruccin
SendKeys en Visual Basic.

Comentarios
Nota El evento KeyPress se aplica slo a formularios y controles de formularios, y no a
los controles de informes.
Para ejecutar una macro o procedimiento de evento cuando se produzca este evento,
establezca la propiedad AlPresionarTecla (OnKeyPress) al nombre de la macro o a
[Procedimiento de evento].
El objeto que tenga el enfoque recibe todas las pulsaciones de teclas. Un formulario slo
puede tener el enfoque si no contiene controles, o si todos sus controles visibles estn
deshabilitados.
Un formulario recibir tambin todos los eventos de teclado, incluso los que se produzcan
para sus controles, si se establece S en su propiedad TeclaDePresentacinPreliminar
(KeyPreview). De esta forma, todos los eventos de teclado se producirn primero para el
formulario y luego para el control que tenga el enfoque. As puede responder a teclas
especficas presionadas en el formulario, independientemente del control que tenga el
enfoque. Por ejemplo, puede ser conveniente que la combinacin de teclas CTRL+X realice
siempre la misma accin en un formulario.
Si mantiene presionada una tecla ANSI, se alternarn repetidamente los eventos KeyDown
y KeyPress (KeyDown, KeyPress, KeyDown, KeyPress, etctera) hasta que suelte la tecla,
momento en que se producir el evento KeyUp.
Un evento KeyPress puede deberse a cualquier carcter imprimible del teclado, a la tecla
CTRL combinada con un carcter del alfabeto estndar o carcter especial y a la tecla
ENTRAR o RETROCESO. Puede usar los procedimientos de evento KeyDown y KeyUp
para ocuparse de cualquier pulsacin de tecla que el evento KeyPress no reconozca, como
por ejemplo las teclas de funcin, las de desplazamiento y las combinaciones de ellas con
modificadores de teclado (teclas ALT, MAYSCULAS o CTRL). A diferencia de los
eventos KeyDown y KeyUp, el evento KeyPress no indica el estado fsico del teclado, sino
el carcter ANSI que corresponde a la tecla o combinacin de teclas presionada.
KeyPress interpreta las formas mayscula y minscula de cada carcter con cdigos de
teclas diferentes, y por ello las considera dos caracteres distintos.
Nota La tecla RETROCESO forma parte del juego de caracteres ANSI, pero no as la
tecla SUPR. Si elimina un carcter de un control con la tecla RETROCESO, provocar un
evento KeyPress, pero no lo har si usa la tecla SUPR.

Pgina

151

Los eventos KeyDown y KeyPress se producen al presionar o enviar una tecla ANSI. El
evento KeyUp se produce despus de cualquier otro para el control producido al presionar o
enviar la tecla. Si una pulsacin de tecla hace que el enfoque se traslade de un control a
otro, el evento KeyDown se producir para el primer control, mientras que los eventos
KeyPress y KeyUp se producirn para el segundo.
Por ejemplo, si se desplaza a un nuevo registro y escribe un carcter en su primer control,
se producirn los siguientes eventos:
Current (para el nuevo registro)

Enter (para el primer control del nuevo registro)

GotFocus (para el control)

KeyDown (para el control)

KeyPress (para el control)

BeforeInsert (para el nuevo registro del formulario)

Change (para el control si es un cuadro de texto o combinado)

KeyUp (para el control)


Si desea ms informacin, vea el Orden de los eventos de pulsaciones de teclas y clics del
mouse.

Ejemplo
En el ejemplo siguiente se pasa a maysculas el texto introducido en un cuadro de texto
segn se va escribiendo, carcter a carcter.
Para probar el ejemplo, agregue el procedimiento de evento siguiente a un formulario que
contenga un cuadro de texto llamado ReginEnvo.

Pgina

152

Private Sub ShipRegion_KeyPress(KeyAscii As Integer)


Dim strCharacter As String
' Convert ANSI value to character string.
strCharacter = Chr(KeyAscii)
' Convert character to upper case, then to ANSI value.
KeyAscii = Asc(UCase(strCharacter))
End Sub

Evento KeyUp
El evento KeyUp se produce cuando el usuario suelta una tecla mientras un formulario o
control tiene el enfoque. Este evento tambin se produce al enviar una pulsacin de tecla a
un formulario o control con la accin EnviarTeclas en una macro o con la instruccin
SendKeys en Visual Basic.

Comentarios
Nota El evento KeyUp se aplica slo a formularios y controles de formularios, y no a los
controles de informes.
Para ejecutar una macro o un procedimiento de evento cuando se produzcan estos eventos,
establezca la propiedad AlSubirTecla (OnKeyUp) en el nombre de la macro o en [Event
Procedure].
En el caso de este evento, el objeto que tenga el enfoque recibe todas las pulsaciones de
teclas. Un formulario slo puede tener el enfoque si no contiene controles, o si todos sus
controles visibles estn deshabilitados.
Un formulario recibir tambin todos los eventos de teclado, incluso los que se produzcan
para sus controles, si se establece S en su propiedad TeclaDePresentacinPreliminar
(KeyPreview). De esta forma, todos los eventos de teclado se producirn primero para el
formulario y luego para el control que tenga el enfoque. As puede responder a teclas
especficas presionadas en el formulario, independientemente del control que tenga el
enfoque. Por ejemplo, puede ser conveniente que la combinacin de teclas CTRL+X realice
siempre la misma accin en un formulario.
Si mantiene presionada una tecla, los eventos KeyDown y KeyPress se alternarn
repetidamente (KeyDown, KeyPress, KeyDown, KeyPress, etctera) hasta que suelte la
tecla, momento en que se producir el evento KeyUp.
Aunque el evento KeyUp se produce al presionar la mayora de las teclas, normalmente se
utiliza para reconocer o distinguir:

Teclas de caracteres extendidos, como por ejemplo las teclas de funcin.

Pgina

153

Teclas de desplazamiento como INICIO, FIN, RE PG, AV PG, FLECHA


ARRIBA, FLECHA ABAJO, FLECHA DERECHA, FLECHA IZQUIERDA y
TAB.

Combinaciones de teclas y modificadores


MAYSCULAS, CTRL o ALT).

Teclado numrico y teclas de nmero ordinarias.

estndar

del

teclado

(teclas

El evento KeyUp no se produce al presionar:

La tecla ENTRAR si el formulario tiene un botn de comando cuya propiedad


Predeterminado (Default) tiene el valor S.

La tecla ESC si el formulario tiene un botn de comando cuya propiedad Cancelar


(Cancel) tiene el valor S.

Sugerencia Para averiguar el carcter ANSI que corresponde a la tecla presionada, use el
evento KeyPress.
El evento KeyUp se produce despus de cualquier otro para el control producido al
presionar o enviar la tecla. Si una pulsacin de tecla hace que el enfoque se traslade de un
control a otro, el evento KeyDown se producir para el primer control, mientras que los
eventos KeyPress y KeyUp se producirn para el segundo.
Si desea ms informacin, vea el Orden de los eventos de pulsaciones de teclas y clics del
mouse.
Si se muestra un cuadro de dilogo modal como resultado de presionar o enviar una tecla,
se producirn los eventos KeyDown y KeyPress, pero no el evento KeyUp.

Pgina

154

Vous aimerez peut-être aussi