0
I’m using Access 2007 to develop a garage control form, which contains information about trips made by drivers. I need to calculate the total time of each trip, and that period can be longer than 24 hours. I was able to calculate without problems when the period is less than 24 hours, but I noticed that the Access Date/Time field cannot store the information I need in this situation. Calculated time field information is stored in text format.
Follows my code
Calculation of Common Hours:
Private Sub txtHoraChegada_LostFocus()
Dim HoraChegada As Date
Dim HoraSaida As Date
Dim HoraTotal As Date
Dim DataViagem As Date
Dim HorasCalculadas
Dim DiasCalculados
DataViagem = Me.txtDataViagem.Value
HoraChegada = Me.txtHoraChegada.Value
HoraSaida = Me.txtHoraSaida.Value
If HoraChegada < HoraSaida Then 'Verifica se a Hora de Chegada é MENOR que a Hora de Saída
If HoraChegada = 0 Then 'Verifica se a Hora de Chegada foi meia noite
HoraChegada = 24
HoraTotal = DateAdd("h", HoraChegada, HoraSaida)
DiasCalculados = DateAdd("d", 1, DataViagem)
End If
HoraTotal = ((HoraChegada - HoraSaida) + 24) * (-1)
DiasCalculados = DateAdd("d", 1, DataViagem)
MsgBox "O período da viagem é maior que 24h, a data de chegada foi ajustada", vbInformation, "Atenção" 'Mensagem ao usuário
End If
If HoraChegada = HoraSaida Then 'Verifica se a Hora de Chegada é igual à Hora de Saída
HoraTotal = 24
Dias = 1
DiasCalculados = DateAdd("d", 1, DataViagem)
End If
If HoraChegada > HoraSaida Then 'Verifica se a Hora de Chegada é Maior que a Hora de Saída
HoraTotal = HoraChegada - HoraSaida
DiasCalculados = DataViagem
End If
Me.txtQtdeDias = Dias
Me.txtDuracaoTotal.Value = Format(HoraTotal, "hh:nn") 'Imprime o valor calculado da duração da viagem na caixa de texto
Me.txtDataChegada.Value = DiasCalculados 'Imprime a data de chegada do motorista na caixa de texto
End Sub
I made a button that should add an extra day (or 24h) to the previously calculated hours
Private Sub btnMaisDias_Click()
dteStart = txtDataViagem
dteEnd = txtDataChegada
Call DisplayHours((dteStart), (dteEnd))
End Sub
And this is the function called by the button (gives division error by zero)
Public Function DisplayHours(dteStart As Date, dteEnd As Date) As String
Dim lngMin As Long, lngHrs As Long
lngMin = DateDiff("n", dteStart, dteEnd)
lngHrs = lngMin / 60
DisplayHours = lngHrs & ":" & Format(lngMin Mod lngHrs, "00")
End Function
I am relatively beginner in programming, someone can identify what I am doing wrong?