VAMOS AO LOOP NO VB.
Existe um campo data em meu sistema que ele informa quando a data for invalida ,porém gostaria de adicionar um loop para não deixar ele sair enquanto a data for errada.
O detalhe e como e um loop no VB ? ja fiz isso em portugues estruturado ,alguem pode me dar um exemplo ?
-Campo Data-
-Função Checa_Data-
O detalhe e como e um loop no VB ? ja fiz isso em portugues estruturado ,alguem pode me dar um exemplo ?
-Campo Data-
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
-Função Checa_Data-
Function Fu_Checa_Data(data$)
'Verifica se a data e valida
Fu_Checa_Data = True
If Not IsDate(data$) Then
Fu_Checa_Data = False
ElseIf Val(Mid(data$, 4, 2)) > 12 Then
Fu_Checa_Data = False
End If
End Function
E uma ajuda para conseguir dar um loop no VB6 ,enquanto a data nao for informada correto ,ficara dando um loop ate a data ser digitada certa.
Bom, se o usuário persistir em digitar a data errada, sua função vai acusar até ele arrumar...mais se vc quiser informar uma data válida com base na data que ele digitou existe a função DateAdd()
DateAdd(onde será adicionado e: "d" = dia, "m" = mês, "y" = ano, nro a ser adicionado 1,2,-1,data)
segue um exemplo completo:
DateAdd("m",1,"01/01/2007") ele retorna = "01/02/2007"
DateAdd("d",1,"01/01/2007") ele retorna = "02/01/2007"
espero ter ajudado...
DateAdd(onde será adicionado e: "d" = dia, "m" = mês, "y" = ano, nro a ser adicionado 1,2,-1,data)
segue um exemplo completo:
DateAdd("m",1,"01/01/2007") ele retorna = "01/02/2007"
DateAdd("d",1,"01/01/2007") ele retorna = "02/01/2007"
espero ter ajudado...
No evento Lost_Focus do seu TextBox vc faz a chamada da sua função Fu_Checa_Data(data$): exemplo:
Private Sub TextBox1_LostFocus()
if Fu_Checa_data(TextBox1.Text)=false then
TextBox1.setfocus
end if
End Sub
Frau
Não entendi muito bem.
No meu lost_Focus ja tem uma função ,mas como que eu aplico essa adicional ?
E ALETERLONE nesse caso quero acusar a data ate o usuario arrumar ,porque as datas aqui são bem completas.
Tentei entender mas nao consegui aplicar ainda
Não entendi muito bem.
No meu lost_Focus ja tem uma função ,mas como que eu aplico essa adicional ?
E ALETERLONE nesse caso quero acusar a data ate o usuario arrumar ,porque as datas aqui são bem completas.
Tentei entender mas nao consegui aplicar ainda
Eu faço assim:
1 - Não deixo digitar nada no campo a não ser numeros
2 - No evento LostFocus do campos eu vou verificar
Se é Valor = "V", Percentual= "P" ou data = "D"
3 - Faço as formatações dos campos e passo pra checagem.
4 - Quando se trata de data e for digitado alguma coisa somente passará para o proximo campo se for uma data válida.
5 - Minha formatacao e checagem das data esta num módulo a parte que esta indo junto aqui.
Espero que ajude.
If Mid(txtCampo(Index).Tag, 1, 1) = "N" Then
If Mid(txtCampo(Index).Tag, 2, 1) = "V" Or Mid(txtCampo(Index).Tag, 2, 1) = "P" Then
If Len(Trim(txtCampo(Index).Text)) > 0 Then
txtCampo(Index).Text = Format(txtCampo(Index).Text, "###,###,##0.00")
Else
txtCampo(Index).Text = Format("0,00", "###,###,##0.00")
End If
Else
If Mid(txtCampo(Index).Tag, 2, 1) = "D" Then
If Len(txtCampo(Index).Text) <> 0 Then
If Muda_Texto_Data(txtCampo(Index).Text) = False Then
Mensagem = "Data com formato inválido. Informe (99/99/9999) ou (99999999)"
Excl_Regi = False
frmMsgBox.txtMensagem.Text = Mensagem
frmMsgBox.Show vbModal
txtCampo(Index).SetFocus
Exit Sub
Else
txtCampo(Index).Text = RetornoData
End If
End If
End If
End If
End If
' Variaveis de definicao das Datas
'' Variável de Data
Public Data As Date
Public RetornoData As Date
Public Resultado As String
Public Caracter As String
Public NumeroBarras As Integer
Public DataAuxiliar As String
1 - Não deixo digitar nada no campo a não ser numeros
2 - No evento LostFocus do campos eu vou verificar
Se é Valor = "V", Percentual= "P" ou data = "D"
3 - Faço as formatações dos campos e passo pra checagem.
4 - Quando se trata de data e for digitado alguma coisa somente passará para o proximo campo se for uma data válida.
5 - Minha formatacao e checagem das data esta num módulo a parte que esta indo junto aqui.
Espero que ajude.
If Mid(txtCampo(Index).Tag, 1, 1) = "N" Then
If Mid(txtCampo(Index).Tag, 2, 1) = "V" Or Mid(txtCampo(Index).Tag, 2, 1) = "P" Then
If Len(Trim(txtCampo(Index).Text)) > 0 Then
txtCampo(Index).Text = Format(txtCampo(Index).Text, "###,###,##0.00")
Else
txtCampo(Index).Text = Format("0,00", "###,###,##0.00")
End If
Else
If Mid(txtCampo(Index).Tag, 2, 1) = "D" Then
If Len(txtCampo(Index).Text) <> 0 Then
If Muda_Texto_Data(txtCampo(Index).Text) = False Then
Mensagem = "Data com formato inválido. Informe (99/99/9999) ou (99999999)"
Excl_Regi = False
frmMsgBox.txtMensagem.Text = Mensagem
frmMsgBox.Show vbModal
txtCampo(Index).SetFocus
Exit Sub
Else
txtCampo(Index).Text = RetornoData
End If
End If
End If
End If
End If
' Variaveis de definicao das Datas
'' Variável de Data
Public Data As Date
Public RetornoData As Date
Public Resultado As String
Public Caracter As String
Public NumeroBarras As Integer
Public DataAuxiliar As String
Public Function Muda_Texto_Data(Data_Info As String) As Boolean
If Data_Info = "" Then Exit Function
Muda_Texto_Data = False
Caracter = ""
NumeroBarras = 0
If Len(Data_Info) < 8 Then
Exit Function
End If
For Contador = 1 To Len(Data_Info)
Caracter = Mid(Data_Info, Contador, 1)
If Caracter = "/" Then
NumeroBarras = NumeroBarras + 1
End If
Next
If NumeroBarras = 0 And Len(Data_Info) = 8 Then
DataAuxiliar = Mid(Data_Info, 1, 2) & "/" & Mid(Data_Info, 3, 2) & "/" & Mid(Data_Info, 5, 4)
Data_Info = DataAuxiliar
NumeroBarras = 2
End If
If NumeroBarras <> 2 Then
Exit Function
End If
If Not IsDate(Data_Info) Then
Exit Function
End If
RetornoData = Data_Info
Muda_Texto_Data = True
End Function
Public Function Diferenca_Datas(DataInicial As Date, DataFinal As Date) As Long
Dim AnoInic As Integer
Dim MesInic As Integer
Dim DiaInic As Integer
Dim AnoFina As Integer
Dim MesFina As Integer
Dim DiaFina As Integer
Dim LoopAnos As Long
Dim LoopMese As Long
Dim LoopDias As Long
Dim SomaAnos As Long
Dim SomaMese As Long
Dim SomaDias As Long
AnoInic = Year(DataInicial)
MesInic = Month(DataInicial)
DiaInic = Day(DataInicial)
AnoFina = Year(DataFinal)
MesFina = Month(DataFinal)
DiaFina = Day(DataFinal)
Diferenca_Datas = 0
SomaAnos = 0
SomaMese = 0
SomaDias = 0
If AnoInic = AnoFina Then
SomaDias = DateDiff("D", DataInicial, DataFinal)
Diferenca_Datas = SomaDias
Exit Function
End If
SomaAnos = DateDiff("YYYY", DataInicial, DataFinal)
Diferenca_Datas = SomaAnos
End Function
Function CalculaIdade(DataNasc As Date)
If IsNull(DataNasc) Or DataNasc > Date Then
Mensagem = "Data de Nascimento Inválida!"
Mensagem = MsgBox(Mensagem, vbExclamation + vbOKOnly, CabMens)
Exit Function
End If
Dim Anos, Meses, Dias
Dim Ianos As Double, Imeses As Double, Intervalo As Double
' O resultado da diferença está em Double
Intervalo = Date - DataNasc
' Um ano tem exatamente 365,25 dias
Ianos = Intervalo / 365.25
Anos = Int(Ianos)
Imeses = (Ianos - Anos) * 12
Meses = Int(Imeses)
Dias = DateDiff("d", DateSerial(DatePart("yyyy", DataNasc) + Anos, DatePart("m", DataNasc) + Meses, Day(DataNasc)), Date)
If Dias = 30 Then
Dias = 0
Meses = Meses + 1
End If
If Meses = 12 Then
Meses = 0
Anos = Anos + 1
End If
Fim:
If Anos > 1 Then
Anos = Anos & " anos "
Else
Anos = Anos & " ano "
End If
If Meses > 1 Then
Meses = Meses & " meses "
Else
Meses = Meses & " mês "
End If
If Dias > 1 Then
Dias = Dias & " dias"
Else
Dias = Dias & " dia"
End If
CalculaIdade = Anos & Meses & Dias
End Function
Bom para validar a data e nao deixar sair do campo eu uso assim:
No evento validate coloque o seguinte codigo:
No evento validate coloque o seguinte codigo:
If IsDate(txt_Seu_Campo.Text) = True Then
Cancel = False
Else
Cancel = True
MsgBox "Digite uma data Válida!", vbInformation, "Valide a data!"
End If
LUCASERODRIGUES
Gostei muito dessa sua solução simples e eficaz pelo jeito ,porem como sou novato ,alias muito novato ,estou meio perdido onde aplicar esse codigo.
Olha os campos abaixo sobre data.
-Campo Data-
"Module1.bas"-Função Checa_Data-
Gostei muito dessa sua solução simples e eficaz pelo jeito ,porem como sou novato ,alias muito novato ,estou meio perdido onde aplicar esse codigo.
Olha os campos abaixo sobre data.
-Campo Data-
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
"Module1.bas"-Função Checa_Data-
Function Fu_Checa_Data(data$)
'Verifica se a data e valida
Fu_Checa_Data = True
If Not IsDate(data$) Then
Fu_Checa_Data = False
ElseIf Val(Mid(data$, 4, 2)) > 12 Then
Fu_Checa_Data = False
End If
End Function
Brother.....ja que voce é iniciante iniciantÃÂÂssimo, usa o que o Frau indicou.
Abraços.
Citação:
No evento Lost_Focus do seu TextBox vc faz a chamada da sua função Fu_Checa_Data(data$): exemplo:Private Sub TextBox1_LostFocus()
if Fu_Checa_data(TextBox1.Text)=false then
TextBox1.setfocus
end if
End Sub
Abraços.
Citação:Vc vai colocar exatamente o código que postei...se tiver alguma coisa lá apaga...Pode fazer o teste que funfa...Não entendi muito bem.
No meu lost_Focus ja tem uma função ,mas como que eu aplico essa adicional ?
Private Sub TextBox1_LostFocus()
if Fu_Checa_data(TextBox1.Text)=false then
TextBox1.setfocus
end if
End Sub
SÓ COPIAR/COLAR E TESTAR...
Cara vou testar.
Tópico encerrado , respostas não são mais permitidas