Tenho um formulário em que preciso utilizar uma função(abaixo) que cancela o salvamento do registro caso determinados campos não estejam preenchidos.
Chamei esta função em Form_BeforeUpdate e funcionou.
Agora preciso que, ao tentar fechar o formulário, a mesma função seja usada para cancelar tanto o fechamento como o salvamento do registro. Ao fazer o procedimento acima em Form_Unload, consegui cancelar o fechamento do formulário, mas quando o evento Form_Unload é acionado, o registro é sendo salvo.
Penso que o melhor aqui é interromper o comando Fechar no evento Form_BeforeUpdate, mas a opção Cancel=True não consegue fazer isso.
:::Função:::
Chamei esta função em Form_BeforeUpdate e funcionou.
- Código:
Private Sub Form_BeforeUpdate(Cancel As Integer)
If criticaCampos = False Then
MsgBox "É obrigatório o preenchimento do campo indicado a seguir.", _
vbCritical, "Preenchimento Incompleto"
Cancel = True '[color=red]Conseguiu para o salvamento[/color]
End If
End Sub
Agora preciso que, ao tentar fechar o formulário, a mesma função seja usada para cancelar tanto o fechamento como o salvamento do registro. Ao fazer o procedimento acima em Form_Unload, consegui cancelar o fechamento do formulário, mas quando o evento Form_Unload é acionado, o registro é sendo salvo.
- Código:
Private Sub Form_Unload(Cancel As Integer)
If criticaCampos = False Then
If MsgBox("Deseja fechar o formulário e cancelar o registro?", vbQuestion + vbYesNo, "Aviso de Férias") = vbYes Then
Me.Undo
DoCmd.Close
Else
Cancel = True '[color=red]Cancela o fechamento, mas não impede o salvamento[/color]
End If
End If
End Sub
Penso que o melhor aqui é interromper o comando Fechar no evento Form_BeforeUpdate, mas a opção Cancel=True não consegue fazer isso.
:::Função:::
- Código:
Private Function criticaCampos()
'Identifica campos nulo com preenchimento obrigatório
Dim ctl As Control
criticaCampos = True
For Each ctl In Me.Controls 'Para cada campo nulo com a marca(tag) igual a 1, exibie mensagem de erro.
If ctl.Tag = 1 Then
If IsNull(ctl) Then
ctl.SetFocus
strCampo = UCase(ctl.Controls(0).Caption)
criticaCampos = False
Exit Function
End If
End If
Next
End Function