Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
O evento BeforeUpdate ocorre antes de os dados alterados em um controle ou registro serem atualizados.
Sintaxe
expressão. BeforeUpdate (Cancelar)
expressão Uma variável que representa um objeto Form.
Parâmetros
| Nome | Obrigatório/Opcional | Tipo de dados | Descrição |
|---|---|---|---|
| Cancel | Obrigatório | Integer | A configuração determina se o evento BeforeUpdate ocorre. Definir o argumento Cancelar como Verdadeiro (1) cancela o evento BeforeUpdate . |
Comentários
Alterar dados em um controle usando o Visual Basic ou uma macro que contém a ação DefinirValor não dispara esses eventos para o controle. No entanto, se você move para outro registro ou salva o registro, o evento BeforeUpdate do formulário ocorrer.
Para executar um procedimento de macro ou evento quando este evento ocorre, defina a propriedade BeforeUpdate para o nome da macro ou para [Procedimento de Evento].
Esse evento não se aplica a botões de opção, caixas de seleção ou botões de alternância em um grupo de opções. Ele se aplica somente ao grupo de opções propriamente dito.
O evento BeforeUpdate é acionado quando um controle ou registro é atualizado. Num registo, os dados alterados em cada controlo são atualizados quando o controlo perde o foco ou quando o utilizador prime Enter ou Tab. Quando o foco sai do registo ou se o utilizador clicar em Guardar Registo no menu Registos , todo o registo é atualizado e os dados são guardados na base de dados.
Quando introduz dados novos ou alterados num controlo num formulário e, em seguida, se move para outro registo ou guarda o registo ao clicar em Guardar Registo no menu Registos , o evento AfterUpdate do formulário ocorre imediatamente após o evento AfterUpdate do controlo.
Quando muda para um registo diferente, ocorrem os eventos Exit e LostFocus do controlo, seguidos do evento Atual do registo para o qual se moveu e dos eventos Enter e GotFocus para o primeiro controlo neste registo. Para executar a macro ApósAtualizar ou procedimento de evento sem executar as macros Exit e LostFocus ou procedimentos de evento, salve o registro usando o comando Salvar registro no menu registros.
BeforeUpdate macros e procedimentos de evento executar somente se você alterar os dados em um controle. Esse evento não ocorre quando um valor é alterado em um controle calculado. BeforeUpdate macros e procedimentos de evento para um formulário executar somente se você alterar os dados em um ou mais controles no registro.
Para formulários, você pode usar o evento BeforeUpdate para cancelar a atualização de um registro antes de mover para outro registro.
Se o usuário insere um novo valor no controle, a configuração da propriedade OldValue não será alterada até que os dados são salvos (o registro é atualizado). Se você cancelar uma atualização, o valor da propriedade OldValue substituirá o valor existente no controle.
Geralmente você utilizar o evento BeforeUpdate para validar dados, especialmente quando são efetuadas validações complexas, como as que:
- Envolvem condições para mais de um valor em um formulário.
- Exibem mensagens de erro distintas à medida que dados diferentes são inseridos.
- Podem ser substituídas pelo usuário.
- Contêm referências a controles de outros formulários ou contêm funções definidas pelo usuário.
Observação
[!OBSERVAçãO] Para executar validações simples ou validações mais complexas, como solicitar um valor em um campo ou validar mais de um controle em um formulário, você pode usar a propriedade ValidationRule para controles e as propriedades ValidationRule e necessárias para campos e registros em tabelas.
Ocorre um erro de tempo de execução se tentar modificar os dados contidos no controlo que acionou o evento BeforeUpdate no procedimento do evento.
Exemplo
O exemplo a seguir mostra como você pode usar um procedimento de evento BeforeUpdate para verificar se um nome de produto já foi inserido no banco de dados. Depois que o usuário digitar um nome de produto na caixa ProductName, o valor será comparado ao campo ProductName na tabela Products. Se houver um valor correspondente na tabela Products, uma mensagem será exibida para informar ao usuário que o produto já foi inserido.
Para testar o exemplo, adicione o seguinte procedimento de evento a um formulário denominado Products que contém uma caixa de texto denominada ProductName.
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
O exemplo a seguir mostra como exibir uma mensagem quando um controle estiver vazio em um formulário contínuo, quando um usuário vai para outro registro.
Private Sub Form_BeforeUpdate(Cancel As Integer)
Dim oContr As Control
For Each oContr In Me.Detail.Controls
If IsNull(oContr) = True Then
If MsgBox(oContr.Name & " is empty", vbOKCancel) = vbCancel Then
Cancel = True: oContr.SetFocus: Exit Sub
End If
End If
Next oContr
End Sub
O exemplo a seguir mostra como usar o evento BeforeUpdate de um formulário para exigir que um valor seja inserido em um controle quando outro controle também tem dados.
Private Sub Form_BeforeUpdate(Cancel As Integer)
If (IsNull(Me.FieldOne)) Or (Me.FieldOne.Value = "") Then
' No action required
Else
If (IsNull(Me.FieldTwo)) or (Me.FieldTwo.Value = "") Then
MsgBox "You must provide data for field 'FieldTwo', " & _
"if a value is entered in FieldOne", _
vbOKOnly, "Required Field"
Me.FieldTwo.SetFocus
Cancel = True
Exit Sub
End If
End If
End Sub
Suporte e comentários
Tem dúvidas ou quer enviar comentários sobre o VBA para Office ou sobre esta documentação? Confira Suporte e comentários sobre o VBA para Office a fim de obter orientação sobre as maneiras pelas quais você pode receber suporte e fornecer comentários.