VAMOS AO LOOP NO VB.
Cara fiz conforme orientado porem nao funciona.
Na realidade trata-se de um função que posso colocar em um module.bas ?
O nome do meu campo e tb_dt "No caso o campo da data"
Na realidade trata-se de um função que posso colocar em um module.bas ?
O nome do meu campo e tb_dt "No caso o campo da data"
Private Sub tb_dt_LostFocus()
If Fu_Checa_Data(tb_dt.Text) = False Then
tb_dt.SetFocus
End If
End Sub
O código está correto...Mas me diga uma coisa: Quando vc sai do foco do seu text(td_dt) ele não está entrando na função (Fu_Checa_data)??? ou seja ele não valida...o que acontece exatamente depois que vc sai do foco(Teclando ENTER,ou TAB ou clicando em outro text?
Então ele verifica que a data esta errada ,mas simplesmente sai do campo e vai para o proximo ,não fica fazendo nenhum laço de repetição.
O que pode ser ?
Olha todo codigo do FORM
O que pode ser ?
Olha todo codigo do FORM
Private Sub bot_limpar_Click()
'Funcao Limpar
TB_nom.Text = ""
ob_ets.Value = False
ob_spl.Value = False
ob_crc.Value = False
If Fu_limpa_data(tb_dt) = False Then
'Chamando a funcao limpa data tb_dt em module1.bas
MsgBox "TESTE"
Exit Sub
End If
tb_dv.PromptInclude = False
'Limpa o campo documento versao
tb_dv.Mask = "##/####"
tb_dv.Text = ""
tb_dv.PromptInclude = True
tb_vrs.PromptInclude = False
'Limpa o campo Versao
tb_vrs.Mask = "#.#"
tb_vrs.Text = ""
tb_vrs.PromptInclude = True
End Sub
Private Sub bot_voltar_Click()
Unload Me
End Sub
Private Sub tb_dt_KeyPress(KeyAscii As Integer)
'Funcao- Quando chegar no 10 digito ,mudara de campo
If tb_dt.SelStart = 9 Then
SendKeys "{TAB}"
End If
End Sub
Private Sub TextBox1_LostFocus()
If Fu_Checa_Data(TextBox1.Text) = False Then
TextBox1.SetFocus
End If
End Sub
Private Sub tb_dt_LostFocus()
If tb_dt.ClipText <> "" Then
If Not Fu_Checa_Data(CStr(tb_dt.Text)) Then
MsgBox "DATA INVALIDA", vbExclamation, "ATENÇÃO"
End If
End If
End Sub
Private Sub tb_dv_KeyPress(KeyAscii As Integer)
'Funcao- Quando chegar no 10 digito ,mudara de campo
If tb_dv.SelStart = 6 Then
SendKeys "{TAB}"
End If
End Sub
Private Sub tb_dv_LostFocus()
If tb_dv.ClipText <> "" Then
If Not Fu_Checa_Data_Documentacao(CStr(tb_dv.Text)) Then
MsgBox "DATA INVALIDA", vbExclamation, "ATENÇÃO"
End If
End If
End Sub
Private Sub TB_nom_Change()
'Verifica no campo nome ,que seja digitado somente letras com numeros
If IsNumeric(TB_nom) = True Then
MsgBox "VERIFIQUE INFORMAÇÃO DIGITADA"
TB_nom.Text = ""
TB_nom.SetFocus
Exit Sub
End If
'Data da maquina no rodapé
pd3d_status(1).Caption = Date
End Sub
Private Sub tb_vrs_KeyPress(KeyAscii As Integer)
'Permite somente número no campo
On Error Resume Next
'KeyAscii = SoNumeros(KeyAscii)
Call SU_Permite_Numero_versao(KeyAscii)
'Funcao- Quando chegar no 02 digito ,mudara de campo
If tb_vrs.SelStart = 2 Then
SendKeys "{TAB}"
End If
End Sub
O problema está aqui:
Depois da msg (Data Inválida) vc deve retornar o foco para o textbox (tb_dt) conforme abaixo:
Citação:
Private Sub tb_dt_LostFocus()
If tb_dt.ClipText <> "" Then
If Not Fu_Checa_Data(CStr(tb_dt.Text)) Then
MsgBox "DATA INVALIDA", vbExclamation, "ATENÇÃO"
End If
End If
End Sub
Depois da msg (Data Inválida) vc deve retornar o foco para o textbox (tb_dt) conforme abaixo:
Private Sub tb_dt_LostFocus()
If tb_dt.ClipText <> "" Then
If Not Fu_Checa_Data(CStr(tb_dt.Text)) Then
MsgBox "DATA INVALIDA", vbExclamation, "ATENÇÃO"
tb_dt.setfocus
exit sub
End If
End If
End Sub
Rsrsrsrsrsr e o retorno.
Deixa eu verificar
Deixa eu verificar
ALLANFOX,
Usa o Evento Validate e não o LostFocus, pq vc cancelando no Validate o foco nem sai do campo.
No LostFocus, se vc tiver 2 campos com essa verificação, com a tabulacao em sequencia, vai dar erro.
Usa o Evento Validate e não o LostFocus, pq vc cancelando no Validate o foco nem sai do campo.
No LostFocus, se vc tiver 2 campos com essa verificação, com a tabulacao em sequencia, vai dar erro.
Private Sub tb_dt_Validate(Cancel As Boolean)
If tb_dt.ClipText <> "" Then
If Not Fu_Checa_Data(CStr(tb_dt.Text)) Then
MsgBox "DATA INVALIDA", vbExclamation, "ATENÇÃO"
Cancel = True
Exit Sub
End If
End If
End Sub
Mesmo jogando VALIDATE não funciona.
E frau mesmo com o comamndo acima ela retorna agora ,so que quando o campo fica branco e nao e preenchido ele passa direto quando utilizo o TAB.
Tem como bloquear tambem ,se for "" - branco ele nao passar tambem.
So mudará de campo se a data estiver correta.
E frau mesmo com o comamndo acima ela retorna agora ,so que quando o campo fica branco e nao e preenchido ele passa direto quando utilizo o TAB.
Tem como bloquear tambem ,se for "" - branco ele nao passar tambem.
So mudará de campo se a data estiver correta.
Quem bom que deu certo...para bloquear se for em branco é fácil, veja abaixo:
Private Sub tb_dt_LostFocus()
if len(tb_dt.text)=0 then
msgbox "A data não pode ficar em branco.",vbExclamation
tb_dt.setfocus
exit sub
end if
If tb_dt.ClipText <> "" Then
If Not Fu_Checa_Data(CStr(tb_dt.Text)) Then
MsgBox "DATA INVALIDA", vbExclamation, "ATENÇÃO"
tb_dt.setfocus
exit sub
End If
End If
End Sub
Ainda passa direto pelo campo em branco.
Que estranho ,o que será que acontece.
Esse LEN na frente do If faz o que ?
Que estranho ,o que será que acontece.
Esse LEN na frente do If faz o que ?
o Len conta qtos caracteres tem no campo.
Se vc tiver usando um MskEditBox (ou outro que faz Mascara) o código não vai da certo.
Se vc tiver usando um MskEditBox (ou outro que faz Mascara) o código não vai da certo.
Tópico encerrado , respostas não são mais permitidas