Prezados Internautas do Forum
Mais uma vez por aqui para solicitar ajuda. Estou tentando fazer um banco para controlar lançamentos de ferias de táxi, criei um formulário para cadastro de motoristas, criei tb. um subformulario, onde eu coloco a data de Inicio, e quando sai coloco a data da saida. Peguei um código da internet e adptei para meus campos, so que estou tendo problema com o retorno da função, vou exemplificar:
Inicio Final
16/04/2007 13/06/2007 pela função retorna 2 meses 28 dias - quando o correto seria 1 mes 28 dias
30/01/2007 03/02/2007 pela função retorna 1 mes 4 dias - quando o correto seria 4 dias
Algumas datas do banco de dados funciona correto
Ja tentei modificar, mas não tive sucesso, vou postar aqui a função, como disse não sei o autor, pois pequei na internet, e era usado para retornas a data de nascimento em anos, meses, dias.
Public Function fncTempo(Final, Inicio As Date) As String
On Error GoTo trataerro
Dim anos As Byte, meses As Variant, dias As Byte, DataRef As Date
If Final >= Date Or Final = 0 Then
fncTempo = ""
Exit Function
End If
If Inicio = Date Then
fncTempo = 0
Exit Function
End If
If IsNull(Final) Then
Final = Date
End If
'Ajusta dataNascimento se cair em ano bissexto
Inicio = IIf(Format(Inicio, "mm/dd") = "02/29", Inicio - 1, Inicio)
anos = Int(IIf(DateDiff("d", Inicio, Final) = 365, 365.25, DateDiff("d", Inicio, Final)) / 365.25)
DataRef = DateSerial(Year(Final) + (Format(Inicio, "mmdd") > Format(Final, "mmdd")), Format(Inicio, "mm"), Format(Inicio, "dd"))
meses = DateDiff("m", DataRef, Final) + (Format(Final, "dd") > Format(Final, "dd"))
DataRef = DateSerial(Year(Final), Format(Final, "mm") + (Format(Inicio, "dd") > Format(Final, "dd")), Format(Inicio, "dd"))
DataRef = IIf(Format(Inicio, "dd") <> Format(DataRef, "dd"), DataRef - Format(DataRef, "dd"), DataRef)
dias = CDbl(Final) - CDbl(DataRef)
fncTempo = IIf(anos <= 1, IIf(anos = 0, "", anos & " ano "), anos & " anos ") & _
IIf(meses <= 1, IIf(meses = 0, "", meses & " mes "), meses & " meses ") & _
IIf(dias <= 1, IIf(dias = 0, "", dias & " dia "), dias & " dias ")
sair:
Exit Function
trataerro:
MsgBox "Erro: " & Err.Number & vbCrLf & Err.Description, vbCritical, "Aviso", Err.HelpFile, Err.HelpContext
Resume sair:
End Function
Aguardo ajuda dos amigos, pois sei que é possivel fazer, estou aprendendo access sozinho, agradeço antecipado
Mais uma vez por aqui para solicitar ajuda. Estou tentando fazer um banco para controlar lançamentos de ferias de táxi, criei um formulário para cadastro de motoristas, criei tb. um subformulario, onde eu coloco a data de Inicio, e quando sai coloco a data da saida. Peguei um código da internet e adptei para meus campos, so que estou tendo problema com o retorno da função, vou exemplificar:
Inicio Final
16/04/2007 13/06/2007 pela função retorna 2 meses 28 dias - quando o correto seria 1 mes 28 dias
30/01/2007 03/02/2007 pela função retorna 1 mes 4 dias - quando o correto seria 4 dias
Algumas datas do banco de dados funciona correto
Ja tentei modificar, mas não tive sucesso, vou postar aqui a função, como disse não sei o autor, pois pequei na internet, e era usado para retornas a data de nascimento em anos, meses, dias.
Public Function fncTempo(Final, Inicio As Date) As String
On Error GoTo trataerro
Dim anos As Byte, meses As Variant, dias As Byte, DataRef As Date
If Final >= Date Or Final = 0 Then
fncTempo = ""
Exit Function
End If
If Inicio = Date Then
fncTempo = 0
Exit Function
End If
If IsNull(Final) Then
Final = Date
End If
'Ajusta dataNascimento se cair em ano bissexto
Inicio = IIf(Format(Inicio, "mm/dd") = "02/29", Inicio - 1, Inicio)
anos = Int(IIf(DateDiff("d", Inicio, Final) = 365, 365.25, DateDiff("d", Inicio, Final)) / 365.25)
DataRef = DateSerial(Year(Final) + (Format(Inicio, "mmdd") > Format(Final, "mmdd")), Format(Inicio, "mm"), Format(Inicio, "dd"))
meses = DateDiff("m", DataRef, Final) + (Format(Final, "dd") > Format(Final, "dd"))
DataRef = DateSerial(Year(Final), Format(Final, "mm") + (Format(Inicio, "dd") > Format(Final, "dd")), Format(Inicio, "dd"))
DataRef = IIf(Format(Inicio, "dd") <> Format(DataRef, "dd"), DataRef - Format(DataRef, "dd"), DataRef)
dias = CDbl(Final) - CDbl(DataRef)
fncTempo = IIf(anos <= 1, IIf(anos = 0, "", anos & " ano "), anos & " anos ") & _
IIf(meses <= 1, IIf(meses = 0, "", meses & " mes "), meses & " meses ") & _
IIf(dias <= 1, IIf(dias = 0, "", dias & " dia "), dias & " dias ")
sair:
Exit Function
trataerro:
MsgBox "Erro: " & Err.Number & vbCrLf & Err.Description, vbCritical, "Aviso", Err.HelpFile, Err.HelpContext
Resume sair:
End Function
Aguardo ajuda dos amigos, pois sei que é possivel fazer, estou aprendendo access sozinho, agradeço antecipado