Uma única ação, como mover de um controle em um objeto para outro controle, pode disparar vários eventos diferentes, que ocorrem em uma sequência específica. Saber quando os eventos ocorrem e em que ordem é importante, porque isso pode afetar como e quando suas macros ou procedimentos de evento são executados. Por exemplo, se houver dois procedimentos de evento que devem ser executados em uma ordem específica, verifique se os eventos aos quais estão associados ocorrerem nessa mesma ordem.
Neste artigo
Ordem de eventos para controles em formulários
Os eventos ocorrem para controles em formulários quando você move o foco para um controle e, quando você altera e atualiza dados em um controle.
Observação: O Microsoft Office Access exibe nomes de eventos ligeiramente diferentes no Editor do Visual Basic do que faz na folha de propriedades e o Construtor de Macros. Por exemplo, o evento chamado On Got Focus na folha de propriedades do formulário e no Construtor de Macros é denominado GotFocus no Editor do Visual Basic. Os exemplos neste artigo usam o formato do Visual Basic for Applications (VBA) para nomes de eventos.
Mover o foco para um controle
Quando você move o foco para um controle em um formulário (por exemplo, ao abrir um formulário que contém um ou mais controles ativos ou ao mover o foco para outro controle no mesmo formulário), os eventos Enter e GotFocus ocorrem nesta ordem:
Insira GotFocus
Quando você abre um formulário, os eventos Enter e GotFocus ocorrem após os eventos associados à abertura do formulário (tais como Open, Activate e Current) da seguinte forma:
Abrir (formulário) Ativar (formulário) Atual (formulário) Enter (controle) GotFocus (controle)
Quando o foco deixa um controle em um formulário (por exemplo, quando você fecha um formulário que contém um ou mais controles ativos ou quando você move para outro controle no mesmo formulário), os eventos Exit e LostFocus ocorrem nesta ordem:
Sair LostFocus
Quando você fechar um formulário, os eventos Exit e LostFocus ocorrem antes dos eventos associados ao fechamento do formulário (como Unload, Deactivate e Close) da seguinte forma:
Sair (controle) LostFocus (controle) Descarregar (formulário) Desativar (formulário) Fechar (formulário)
Alterando e atualizando dados em um controle
Se você inserir ou alterar dados em um controle em um formulário e, em seguida, mover o foco para outro controle, os eventos BeforeUpdate e AfterUpdate ocorrerão:
BeforeUpdate Afte rUpdate
Os eventos Exit e LostFocus para um controle cujo valor muda ocorrem após os eventos BeforeUpdate e AfterUpdate:
BeforeUpdate AfterUpdate Exit LostFocus
Quando você altera o texto em uma caixa de texto ou na seção de caixa de texto de uma caixa de combinação, o evento Change ocorre. Este evento ocorre sempre que o conteúdo do controle é alterado, mas antes de mover o foco para um controle ou registro diferente (e, portanto, antes dos eventos BeforeUpdate e AfterUpdate ocorrerem). A seguinte sequência de eventos ocorre em cada tecla pressionada em uma caixa de texto ou na seção de caixa de texto de uma caixa de combinação:
KeyDown KeyPress Dirty KeyUp
O evento NotInList ocorre depois que você insere um valor em uma caixa de combinação que não é encontrada na lista da caixa de combinação e, em seguida, tenta mover o foco para outro controle ou registro. O evento NotInList ocorre depois dos eventos de teclado e os eventos Change para a caixa de combinação, mas antes dos eventos para qualquer outro controle ou formulário. Se a propriedade LimitToList da caixa de combinação estiver definida como Yes, um evento Error para o formulário ocorre imediatamente após o evento NotInList:
KeyDown KeyPress Alteração Suja KeyUp Erro de0 NotInList
Ordem de eventos para registros em formulários
Os eventos ocorrem para os registros em formulários quando você move o foco para um registro diferente, atualiza dados em um registro, exclui um ou mais registros existentes ou cria um novo registro.
Movendo o foco para registros e atualizando dados em registros
Quando você move o foco para um registro existente em um formulário, insere ou altera dados no registro e, em seguida, move o foco para outro registro, a seguinte sequência de eventos ocorre para o formulário:
Atual (formulário) BeforeUpdate (formulário) AfterUpdate (formulário) Current (formulário)
Quando você sai do registro cujos dados foram alterados, mas antes de inserir o próximo registro, os eventos Exit e LostFocus ocorrem para o controle que tem o foco. Estes eventos ocorrem após os eventos BeforeUpdate e AfterUpdate para o formulário da seguinte maneira:
BeforeUpdate (form) AfterUpdate (form) Exit (control) LostFocus (control) Current (form)
Conforme você move o foco entre os controles em um formulário, os eventos ocorrem para cada controle. Por exemplo, as seguintes sequências de eventos ocorrem quando você faz o seguinte:
-
Abre um formulário e altera dados em um controle:
Atual (formulário) Enter (controle) GotFocus (controle) BeforeUpdate (controle) AfterUpdate (controle)
-
Move o foco para outro controle:
Saída (control1) LostFocus (control1) Enter (control2) GotFocus (control2)
-
Move o foco para outro registro:
BeforeUpdate (form) AfterUpdate (form) Exit (control2) LostFocus (control2) Current (form)
Excluindo registros
Quando você exclui um registro, os seguintes eventos ocorrem para o formulário e o Microsoft Office Access exibe uma caixa de diálogo pedindo para confirmar a exclusão:
Excluir BeforeDelConfirm AfterDelConfirm
Se você cancelar o evento Delete, os eventos BeforeDelConfirm e AfterDelConfirm não ocorrerão e a caixa de diálogo não será exibida.
Criar um novo registro
Quando você move o foco para um novo registro (em branco) em um formulário e, em seguida, cria um novo registro digitando os dados em um controle, ocorre a seguinte sequência de eventos:
Atual (formulário) Enter (controle) GotFocus (controle) BeforeInsert (formulário) AfterInsert (formulário)
O evento BeforeInsert (formulário) é disparado assim que você começa a digitar no controle. O evento AfterInsert (formulário) é disparado após você deixar o registro.
Os eventos BeforeUpdate e AfterUpdate para os controles no formulário e para o novo registro ocorrem após o evento BeforeInsert e antes do evento AfterInsert.
Ordem de eventos para formulários e subformulários
Os eventos ocorrem para os formulários quando você abre ou fecha um formulário, move-se entre formulários ou trabalha com dados em um formulário ou subformulário.
Abrindo e fechando um formulário
Quando você abre um formulário, ocorre a seguinte sequência de eventos para o formulário:
Abrir Carregamento Redimensionar Ativar Atual
Se não houver controles ativos no formulário, o evento GotFocus ocorrerá para o formulário após o evento Activate, mas antes do evento Current.
Quando você fecha um formulário, ocorre a seguinte sequência de eventos para o formulário:
Descarregar Desativar Fechar
Se não houver controles ativos no formulário, o evento LostFocus ocorrerá para o formulário após o evento Unload, mas antes do evento Deactivate.
Movimentação entre formulários
Quando você alterna entre dois formulários abertos, o evento Deactivate ocorre para o primeiro formulário e o evento Activate ocorre para o segundo:
Desativar (form1) Ativar (form2)
O evento Deactivate para um formulário também ocorre quando você alterna do formulário para outra guia de objeto no Access. No entanto, o evento Deactivate não ocorre quando você alterna para uma caixa de diálogo, para um formulário cuja propriedade PopUp estiver definida como Yes ou para uma janela em outro programa.
Observação: O evento Open não ocorrerá se você mover o foco para um formulário que já está aberto, mesmo se você tiver movido o foco para esse formulário executando uma ação OpenForm.
Trabalhando com dados em um formulário
Os eventos de formulário e controle ocorrem à medida que você move entre os registros no formulário e altera os dados. Por exemplo, quando você abre um formulário primeiro, ocorre a seguinte sequência de eventos:
Abrir (formulário) Carga (formulário) Redimensionar (formulário) Ativar (formulário) Atual (formulário) Enter (controle)0 GotFocus (controle)
Da mesma forma, quando você fecha um formulário, ocorre a seguinte sequência de eventos:
Sair (controle) LostFocus (controle) Descarregar (formulário) Desativar (formulário) Fechar (formulário)
Se você tiver alterado dados em um controle, os eventos BeforeUpdate e AfterUpdate ocorrerão para o controle e o formulário antes do evento Exit para o controle.
Trabalhando com subformulários
Quando você abre um formulário que contém um subformulário, o subformulário e seus registros são carregados antes do formulário principal. Dessa forma, os eventos no subformulário e seus controles (como Open, Current, Enter, e GotFocus) ocorrem antes dos eventos para o formulário. No entanto, o evento Activate não ocorre para subformulários. Portanto, abrindo um formulário principal dispara um evento Activate apenas para o formulário principal.
Da mesma forma, quando você fechar um formulário que contém um subformulário, o subformulário e seus registros são descarregados depois do formulário. O evento Deactivate não ocorre para subformulários. Portanto, fechar um formulário principal dispara um evento Deactivate apenas para o formulário principal. Os eventos para os controles, o formulário e os subformulário ocorrem na seguinte ordem:
-
Eventos para os controles de subformulário (como Exit e LostFocus)
-
Eventos para os controles de formulário (incluindo o controle de subformulário)
-
Eventos para o formulário (como Deactivate e Close)
-
Eventos para o subformulário
Observação: Como os eventos para um subformulário ocorrem após o formulário principal ser fechado, determinados eventos, como cancelar o fechamento do formulário principal de um evento no subformulário, não ocorrerão. Talvez você precise mover esses tipos de testes de validação para um evento no formulário principal.
Ordem de eventos para pressionamentos de teclas e cliques do mouse
Os eventos de teclado ocorrem para formulários e controles quando você pressiona teclas ou envia pressionamentos de teclas enquanto o formulário ou controle tem o foco. Os eventos de mouse ocorrem para formulários, seções de formulário e controles em formulários quando você clica nos botões do mouse enquanto o ponteiro do mouse está em um formulário, seção ou controle. Os eventos de mouse também ocorrem quando você move o ponteiro do mouse sobre um formulário, seção ou controle.
Eventos de teclado
Quando você pressiona e libera uma tecla enquanto um controle em um formulário tem o foco (ou usa a ação SendKeys ou instrução para enviar um pressionamento de tecla), ocorre a seguinte sequência de eventos:
KeyDown KeyPress KeyUp
Quando você pressiona e libera uma tecla ou envia um pressionamento de tecla no conjunto de caracteres ANSI, todos os eventos KeyDown, KeyPress e KeyUp ocorrem. Se você pressionar e mantiver pressionada uma tecla ANSI, os eventos KeyDown e KeyPress alternarão repetidamente (KeyDown, KeyPress, KeyDown, KeyPress e assim por diante) até você liberar a tecla; em seguida, o evento KeyUp ocorrerá.
Se você pressionar e liberar uma tecla não ANSI, os eventos KeyDown e KeyUp ocorrerão. Se você pressionar e mantiver pressionada uma tecla não ANSI, o evento KeyDown ocorrerá repetidamente até que você libere a tecla e, em seguida, o evento KeyUp ocorrerá.
Se pressionar uma tecla acionar um outro evento para um controle, esse evento ocorrerá após o evento KeyPress, mas antes do evento KeyUp. Por exemplo, se um pressionamento de tecla converter o texto em uma caixa de texto, que dispara um evento Change, a seguinte sequência de eventos ocorrerá:
KeyDown KeyPress Altere KeyUp
Se um pressionamento de tecla faz o foco se mover de um controle para outro, o evento KeyDown ocorrerá para o primeiro controle, enquanto os eventos KeyPress e KeyUp ocorrerá para o segundo controle. Por exemplo, se você altera dados em um controle e, em seguida, pressiona a tecla TAB para mover para o próximo controle, as seguintes sequências de eventos ocorrerão:
-
Primeiro controle:
KeyDown BeforeUpdate AfterUpdate Exit LostFocus
-
Segundo controle:
Insira KeyPress KeyPress KeyUp
Eventos de mouse
Quando você clicar e soltar o botão do mouse enquanto o ponteiro do mouse está sobre um controle em um formulário, a seguinte sequência de eventos ocorrerá para o controle:
MouseDown MouseUp Clique
Se um controle tiver o foco e você clicar em outro controle para mover o foco para esse segundo controle, ocorrerão as seguintes sequências de eventos:
-
Primeiro controle:
Sair LostFocus
-
Segundo controle:
Insira MouseDown MouseDown #x4 MouseUp Clique
Se você mover para outro registro e, em seguida, clicar em um controle, o evento Current para o formulário também ocorrerá antes do evento Enter para o controle.
Clicar duas vezes em um controle faz ambos os eventos Click e DblClick ocorrerem. Por exemplo, quando você clica duas vezes um controle que não seja um botão de comando, a seguinte sequência de eventos ocorre para o controle:
MouseD próprio MouseUp Clique MouseUp DblClick
Quando você clica duas vezes um botão de comando, a sequência de eventos anterior ocorre, seguida por um segundo evento Click.
O evento MouseMove para um formulário, seção ou controle ocorre quando você move o ponteiro do mouse sobre o formulário, seção ou controle. Este evento é independente dos outros eventos de mouse.
Ordem de eventos para relatórios e seções de relatório
Os eventos ocorrem para relatórios e seções de relatório quando você abre um relatório para imprimi-lo ou visualizá-lo ou fechar um relatório.
Eventos para relatórios
Quando você abre um relatório para imprimi-lo ou visualizá-lo e depois fecha o relatório ou move para outra guia de objeto no Access, a seguinte sequência de eventos ocorre para o relatório:
Abrir Ativar Fechar Desativar
Quando você alterna entre dois relatórios abertos, o evento Deactivate ocorre para o primeiro relatório e o evento Activate ocorre para o segundo:
Desativar (report1) Ativar (relatório2)
O evento Deactivate para um relatório também ocorre quando você alterna do relatório para outra guia de objeto no Access. No entanto, o evento Deactivate não ocorre quando você alterna para uma caixa de diálogo, para um formulário cuja propriedade PopUp estiver definida como Yes ou para uma janela em outro programa.
Quando você abre um relatório baseado em uma consulta, o Access dispara o evento Open para o relatório antes de executar a consulta subjacente. Como resultado, você pode definir os critérios para o relatório usando uma macro ou procedimento de evento que responde ao evento Open. Por exemplo, a macro ou procedimento de evento pode abrir uma caixa de diálogo personalizada na qual você insere critérios de relatório.
Eventos para seções de relatório
Quando você imprime ou visualiza um relatório, os eventos Format e Print ocorrem para as seções do relatório após os eventos Open e Activate para o relatório e antes dos eventos Close ou Deactivate do relatório:
Abrir (relatório) Ativar (relatório) Formato (seção relatório) Imprimir (seção relatório) Fechar (relatório) Desativar (relatório)
Segurança Você pode usar o Modo de Exibição de Relatório para habilitar a filtragem de relatórios pelo usuário. Mas, ao contrário da Visualização de Impressão, os eventos Formatar e Imprimir em qualquer seção não ocorrem no Modo de Exibição de Relatório. Isso também se aplica aos resultados da função VBA e aos procedimentos definidos pelo usuário que são exibidos em controles (como legendas de rótulo, exibição status, formatação condicional, redimensionamento de controles e assim por diante) nesses eventos. Portanto, não use código neste evento para formatar, ocultar ou imprimir dados confidenciais, que podem ficar expostos. Recomendamos filtrar previamente os dados ou desabilitar a Visualização de Relatório definindo a propriedade AllowReportView como No.
Além disso, os seguintes eventos podem ocorrer durante ou após a formatação, mas antes do evento Print:
-
O evento Retreat ocorre quando o Access retorna para uma seção anterior durante a formatação do relatório.
-
O evento NoData ocorrerá se não houver registros exibidos pelo relatório.
-
O evento Page ocorre após a formatação, mas antes de imprimir. Você pode usar esse evento para personalizar a aparência do relatório impresso.