BUCHA DAS GRANDES - CURSOR ESTA PRESO NO CAMPO DAT
Ja tentei de tudo mas não consegui solução.
Tenho duas telas onde a segunda tela e o grade problema. Nos campos datas não quero deixar a pessoa passar sem digitar nada ,e se digitar errado ela auto_limpa o campo e obriga a pessoa a preencher de novo.
Porem que acabei ficando preso porque toda vez que eu quero dar um limpa tela e alguma data esta em branco ,pede para informar a data pu quando vou voltar para o campo anterior pede para informar a data.
Falam que nao e correto voce fazer um setfocus nessas situações.
Alguma boa alma tem ideia de como posso resolver essa bucha.
R1VN002 = FORM2
Tenho duas telas onde a segunda tela e o grade problema. Nos campos datas não quero deixar a pessoa passar sem digitar nada ,e se digitar errado ela auto_limpa o campo e obriga a pessoa a preencher de novo.
Porem que acabei ficando preso porque toda vez que eu quero dar um limpa tela e alguma data esta em branco ,pede para informar a data pu quando vou voltar para o campo anterior pede para informar a data.
Falam que nao e correto voce fazer um setfocus nessas situações.
Alguma boa alma tem ideia de como posso resolver essa bucha.
R1VN002 = FORM2
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()
' Se o tamanho do campo for igual a 0 ,ele retorna ate o preenchimento correto
If Len(tb_dt.ClipText) < 8 And Len(tb_dt.ClipText) = 0 Then
MsgBox "Informe a data.", vbExclamation, "ATENÇÃO"
tb_dt.SetFocus
Exit Sub
End If
If tb_dt.ClipText <> "" Then
' Se o valor digitado for diferente de branco ele entra na funcao FU_Checa
If Not Fu_Checa_Data(CStr(tb_dt.Text)) Then
MsgBox "DATA INVALIDA", vbExclamation, "ATENÇÃO"
'Limpa campo apos o retorno do foco
tb_dt.Text = "__/__/____"
tb_dt.SetFocus
Exit Sub
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()
' Se o tamanho do campo menor que 6 ou igual a 0 ,ele retorna ate o preenchimento correto
If Len(tb_dv.ClipText) < 6 And Len(tb_dv.ClipText) = 0 Then
MsgBox "Informe a data.", vbExclamation, "ATENÇÃO"
tb_dv.SetFocus
Exit Sub
End If
If tb_dv.ClipText <> "" Then
' Se o valor digitado for diferente de branco ele entra na funcao FU_Checa
If Not Fu_Checa_Data_Documentacao(CStr(tb_dv.Text)) Then
MsgBox "DATA INVALIDA", vbExclamation, "ATENÇÃO"
tb_dv.Text = "__/____"
tb_dv.SetFocus
Exit Sub
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
Cara o problema deve estar na sua função:
Fu_limpa_data(tb_dt), poste ela para ficar + fácil na ajuda.
O código que postou parece estar correto, porque o envento LostFocus só entraráe em ação se antes o campo data estiver em foco...
E para limpar as datas seria uma sub assim:
Fu_limpa_data(tb_dt), poste ela para ficar + fácil na ajuda.
O código que postou parece estar correto, porque o envento LostFocus só entraráe em ação se antes o campo data estiver em foco...
E para limpar as datas seria uma sub assim:
sub LimpaCampos()
txtData.text=""
ou
txtData.text="__/____"
end Sub
Frau só vc mesmo para aguentar essas duvidas rsrsrsr
Olhe o codigo está ai abaixo ,porém não sei se vc entendeu bem.
Quando eu deixo de preencher alguma data ele me força a ficar num loop ate o preenchimento da mesma ,isso foi opção ,mas quando vc dá um limpa_tela e alguma data não foi preenchida fica nessa ,preencha data ,preencha data ,preencha data , não sai entendeu ,simplesmente fica nessa.
Será que tem solução nesse caso.
Olhe o codigo está ai abaixo ,porém não sei se vc entendeu bem.
Quando eu deixo de preencher alguma data ele me força a ficar num loop ate o preenchimento da mesma ,isso foi opção ,mas quando vc dá um limpa_tela e alguma data não foi preenchida fica nessa ,preencha data ,preencha data ,preencha data , não sai entendeu ,simplesmente fica nessa.
Será que tem solução nesse caso.
Public Function Fu_limpa_data(mskEdit As MaskEdBox)
Fu_limpa_data = False
mskEdit.PromptInclude = False
mskEdit.Mask = "##/##/####"
mskEdit.Text = ""
mskEdit.PromptInclude = True
Fu_limpa_data = True
End Function
Entendi simmm! Faça o seguinte esqueçe esta função de limpar e altere o codigo do botão limpar conforme abaixo:
Tente ai, depois poste.
Private Sub bot_limpar_Click()
'Funcao Limpar
TB_nom.Text = ""
ob_ets.Value = False
ob_spl.Value = False
ob_crc.Value = False
tb_dt.Text = "__/__/____" 'Limpa data
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
Tente ai, depois poste.
Ok acabei de ter outra ideia ,e se eu trocasse o campo grifado por diferente e fizesse a verificação somente no quando eu clicar no botão confirma.
Tipo fazer preenher os campos vazios "Data" e "Nome" por exemplo.
E uma ideia ,isso em codigo como ficaria ?
Mas antes irei fazer seu teste.
' Se o tamanho do campo for igual a 0 ,ele retorna ate o preenchimento correto
If Len(tb_dt.ClipText) < 8 And Len(tb_dt.ClipText) <> 0 Then
MsgBox "Informe a data.", vbExclamation, "ATENÇÃO"
tb_dt.SetFocus
Exit Sub
Tipo fazer preenher os campos vazios "Data" e "Nome" por exemplo.
E uma ideia ,isso em codigo como ficaria ?
Mas antes irei fazer seu teste.
' Se o tamanho do campo for igual a 0 ,ele retorna ate o preenchimento correto
If Len(tb_dt.ClipText) < 8 And Len(tb_dt.ClipText) <> 0 Then
MsgBox "Informe a data.", vbExclamation, "ATENÇÃO"
tb_dt.SetFocus
Exit Sub
Sim, mas vc testou a alteração que fiz no fonte (Sub bot_limpar_Click)()?????????????? deu certo?
Posso só lembrar um comentário que fiz em outro tópico ?
Como desenvolvedores precisamos estar preparados para mudanças de planos não previstas.
Eu alertei para que vc teria problemas dificultando sua programação e o usuário para encerrar sua aplicação caso estivesse neste ponto.
Depois de entregar o programa vão te chamar para mudar isto !
Mas vamos lá, não sou o dono da verdade (apenas de um pouco mais de experiencia) e por isto siga por onde quiser.
Faz isso fii:
No botão OK:
Citação:Caso queira mesmo continuar com seu processo (usuário pode não saber o que fazer caso queira simplesmente encerrar o programa estando com o cursor neste campo) vamos lá
Como desenvolvedores precisamos estar preparados para mudanças de planos não previstas.
Eu alertei para que vc teria problemas dificultando sua programação e o usuário para encerrar sua aplicação caso estivesse neste ponto.
Depois de entregar o programa vão te chamar para mudar isto !
Mas vamos lá, não sou o dono da verdade (apenas de um pouco mais de experiencia) e por isto siga por onde quiser.
Faz isso fii:
No botão OK:
Private Sub Command1_Click()
If ValidaTela = False Then
Exit Sub
End If
'Executa Comandos caso validado
End Sub
Private Function ValidaTela() As Boolen
If Not IsDate(txtData1.text) Then
Msgbox "Não é possivel Confirmar a operação sem uma data inicial válida", vbCritical, "Data Inválida"
txtData1.Text = ""
txtData1.setfocus
Exit Function
End If
'Repita a verificação para todos campos que exijam validação
'Caso Tudo OK
ValidaTela = True
End Function
Cara show de bola realmente vc tinha razão de conferir somente na confirmação do programa.
Testei de cara mas não funcionou irei dar uma analisada e posto o resultado.
Testei de cara mas não funcionou irei dar uma analisada e posto o resultado.
Emerson Tadeu
Estava pensando ao inves de eu fazer um função em um modulo ,eu poderia fazer um função simples para verificar ,só que ai como não sei a sintase.
Aqui ele ja verifica ,mas como tem mais de um campo como faça para ele ver os outros campos ,ja tentei And mais da pau.
Estava pensando ao inves de eu fazer um função em um modulo ,eu poderia fazer um função simples para verificar ,só que ai como não sei a sintase.
Aqui ele ja verifica ,mas como tem mais de um campo como faça para ele ver os outros campos ,ja tentei And mais da pau.
Private Sub bt_confirma_Click()
If Trim(TB_nom.Text) = "" Then
MsgBox "Não é possivel Confirmar a operação sem o preenchimento dos campos", vbCritical, "Data Inválida"
TB_nom.SetFocus
End If
[c]Private Sub bt_confirma_Click()
If Trim(TB_nom.Text) Or Trim(tb_vrs.Mask) = "" Then
MsgBox "Não é possivel Confirmar a operação sem o preenchimento dos campos", vbCritical, "Data Inválida"
TB_nom.SetFocus
tb_vrs.SetFocus
End If
Alguém pode dar uma ajuda.
Emerson Tadeu
Estava pensando ao inves de eu fazer um função em um modulo ,eu poderia fazer um função simples para verificar ,só que ai como não sei a sintase.
Aqui ele ja verifica ,mas como tem mais de um campo como faça para ele ver os outros campos ,ja tentei And mais da pau.
Emerson Tadeu
Estava pensando ao inves de eu fazer um função em um modulo ,eu poderia fazer um função simples para verificar ,só que ai como não sei a sintase.
Aqui ele ja verifica ,mas como tem mais de um campo como faça para ele ver os outros campos ,ja tentei And mais da pau.
Private Sub bt_confirma_Click()
If Trim(TB_nom.Text) = "" Then
MsgBox "Não é possivel Confirmar a operação sem o preenchimento dos campos", vbCritical, "Data Inválida"
TB_nom.SetFocus
End If
[c]Private Sub bt_confirma_Click()
If Trim(TB_nom.Text) Or Trim(tb_vrs.Mask) = "" Then
MsgBox "Não é possivel Confirmar a operação sem o preenchimento dos campos", vbCritical, "Data Inválida"
TB_nom.SetFocus
tb_vrs.SetFocus
End If
ALLAN, deste jeito que vc está tentando fazer tem que ser um por vez, veja abaixo:
[c]Private Sub bt_confirma_Click()
If Trim(TB_nom.Text)="" then
MsgBox "Não é possivel Confirmar a operação sem o preenchimento do nome", vbCritical, "Data Inválida"
TB_nom.SetFocus
end if
if Trim(tb_vrs.Mask) = "" Then
MsgBox "Não é possivel Confirmar a operação sem o preenchimento do campo data", vbCritical, "Data Inválida" ' Coloque a msg referente ao campo testado.
tb_vrs.SetFocus
end if
end sub
[c]Private Sub bt_confirma_Click()
If Trim(TB_nom.Text)="" then
MsgBox "Não é possivel Confirmar a operação sem o preenchimento do nome", vbCritical, "Data Inválida"
TB_nom.SetFocus
end if
if Trim(tb_vrs.Mask) = "" Then
MsgBox "Não é possivel Confirmar a operação sem o preenchimento do campo data", vbCritical, "Data Inválida" ' Coloque a msg referente ao campo testado.
tb_vrs.SetFocus
end if
end sub
Tópico encerrado , respostas não são mais permitidas