Adolfo, sua observação até um certo ponto é valida, ou seja sugere a verificação dos campos somente quando acionar o Botão para enviar.
Digo até um certo ponto, pois na questão do colega Lorenzon, o mesmo está utilizando o Evento EXIT para que seja identificado se o campo está vazio antes de se pular para o outro campo, retornando ao campo em questão e impedindo a progressão, e para obtermos este tipo de ação temos de utilizar o Evento EXIT.
Agora se não me engano eu já tratei deste assunto aqui no Forum, e comentei que deve-se tomar muito cuidado com estes Eventos, EXIT, BeforerUpdate e outros, onde temos como parâmetros ou argumentos da função a Propriedade "CANCEL" (Aquele que vem entre Parentes (ByVal Cancel As MSForms.ReturnBoolean).
Ela sempre acaba dando uma bagunçada e devemos fazer algumas manobras, ou seja, por padrão ela é sempre False e para obtermos a ação de retornarmos ao campo se não foi atendida o que se propôs, temos de reverte-la alterando o seu valor para TRUE, o que é feito da forma que se encontra nas rotinas no exemplo anexado - Cancel = True.
Desta forma, uma solução possível, e lógicamente, terá de ser testada com todas as opções possíveis paraver se não irá afetar em outros campos ou rotinas fora do formulário por ser uma propriedade Global, seria criarmos uma outra Variável, por exemplo :
Adicione em um Módulo qualquer a seguinte instrução :
'Não pode estar no modulo do Formulário, tem de ser um Modulo separado.
Public sCancelar As Boolean
Depois troque as rotinas do formulário pelas abaixo :
Private Sub textbox2_Exit(ByVal Cancel As MSForms.ReturnBoolean)
If sCancelar = True Then
sCancelar = False
Exit Sub
If TextBox2.Value = "" Then
MsgBox ("O preenchimento do campo Centro de Custo é obrigatório."), vbCritical, "Atenção!"
Cancel = True
End If
End If
End Sub
Private Sub textbox3_Exit(ByVal Cancel As MSForms.ReturnBoolean)
If sCancelar = True Then
sCancelar = False
Exit Sub
If TextBox3.Value = "" Then
MsgBox ("O preenchimento do campo Mês é obrigatório."), vbCritical, "Atenção!"
Cancel = True
End If
End If
End Sub
Private Sub CommandButton1_Click()
Response = MsgBox("Deseja realmente cancelar ?", vbYesNo, "Atenção!")
sCancelar = True
Select Case Response
Case 6
Unload Me
Case 7
End Select
End Sub
Como disse acima, tem de ser feito varios testes e ir analizando cada ponto.
Eu particularmente, acho um pouco complicado lidar com este tipo de evento, já tive projetos que acabei alterando por não ter conseguido um resultado positivo.
[]s
Existem mil maneiras de preparar Neston. Invente a sua!
http://www.youtube.com/ExpressoExcel
Postado : 28/07/2013 1:16 pm