Colega Cafpr, bom dia.
Realizei o teste da seguinte forma:
Seu código
Private Sub cli_CPF_BeforeUpdate(Cancel As Integer)
If Me.cli_CPF.Value <> fCPF(Me.cli_CPF) Then
MsgBox "CPF Invalido," & cli_CPF.Text, _
vbInformation, "Atenção"
DoCmd.CancelEvent
Cancel = True
Else
MsgBox "CPF válido..." & cli_CPF.Text, _
vbInformation, "Confirmação"
Me.cli_CPF.InputMask = "000\.000\.000\-00"
If (Not IsNull(DLookup("[cli_CPF]", "TblClientes", _
"[cli_CPF] ='" & Me!cli_CPF & "'"))) Then
MsgBox "CPF já está cadastrado no sistema..." & cli_CPF.Text, _
vbInformation, "Duplicidade"
Cancel = True 'cancela o evento.
Me!cli_CPF.Undo 'desfaz a digitação.
End If
End If
End Sub
Após as adaptações(alguns paramentros não tem no BD), ficou assim (me corrija se fiz alguma coisa errado, por favor)
Private Sub Cpf_AfterUpdate()
If Me.Cpf.Value <> dvcpf CPF(Me.Cpf) Then
MsgBox "CPF Invalido," & Cpf.Text, _
vbInformation, "Atenção"
DoCmd.CancelEvent
Cancel = True
Else
MsgBox "CPF válido..." & Cpf.Text, _
vbInformation, "Confirmação"
Me.Cpf.InputMask = "000\.000\.000\-00"
If (Not IsNull(DLookup("[CPF]", "Tbl_geral", _
"[CPF] ='" & Me!Cpf & "'"))) Then
MsgBox "CPF já está cadastrado no sistema..." & Cpf.Text, _
vbInformation, "Duplicidade"
Cancel = True 'cancela o evento.
Me!Cpf.Undo 'desfaz a digitação.
End If
End If
End sub
Aí retorna erro de compilação, sintaxe na linha vermelha acima.
Prezados colegas, o que estou precisando e o seguinte:
tem o campo "CPF" que é implementado por uma função de validação cuja a mesma já está posta no tópico (após solicitação do colega Topbr). Então, o usuário ao digitar um número no campo "CPF" este é verificado e, caso esteja correto, será validado, retornando para o usuário uma msg de confirmação. Este(usuário) ao clicar em "ok" na msg, prossegue com o preenchimento do registro. Caso contrário, ou seja, se o número digitado no campo "CPF" não for validado, retorna para o usuário uma msg informando que aquele número digitado não é válido.
O que está acontecendo:
quando o usuário recebe a msg de "cpf inválido" ele (usuário) tem clicar em "ok" da janela da msg para prosseguir. Ele (usuario) clica em "ok", o cursor retorna para o campo "CPF", mas o número digitado pelo usuário ali não apaga e se o usuário apertar a tecla tab o cursor passa para o próximo campo, permitindo digitação.
O que pretendemos é que, após ele clicar no "ok" da janela de msg do cpf inválido, o cursor permaneça no campo "CPF" e daí não saia até que seja digitado um número de cpf válido, quando, então, o usuário receberá uma msg de "cpf válido" e ele(usuário)poderá prosseguir com o preenchimento do registro que está a fazer, após clicar no "ok" desta janela.
Colega Cafpr, o código que você sugeriu
Private Sub SeuCampo_Exit(Cancel As Integer)
If IsNull(SeuCampo) Or Me.SeuCampo = "" Then
MsgBox "Este campo é de preenchimento obrigatório!"
DoCmd.CancelEvent
End If
End Sub
não impede de que o usuário sai do campo "CPF". Como já citei, mesmo que ele(usuário) digite um numero de cpf inválido, o cursor passa para o próximo campo se apertada a tecla tab. Ou seja, esse código, em marrom, apenas impede que não deixe o campo "CPF" em branco, não importando que dados esteja ali digitado.
Resumindo,
o meu objetivo é impedir que seja digitado um número de cpf inválido e "obrigar" o usuário a permanecer no campo "CPF" até que seja ali digitado um número válido, caso contrário o sistema não salvará o registro para que o mesmo seja completado posteriormente.
Penso(desculpem-me se estiver com o raciocínio errado) que código pretendido deveria vir na função de validação do cpf. Como e onde vai este código, passa dos meus conhecimento. Assim sendo, estou contando com a ajuda dos "feras" do fórum.
Desde já agradecendo, permaneço na expectativa.
Abraços