I'm using Access 2007 to develop a garage control form, which provides travel information made by drivers. I need to calculate the total amount of time for each trip, and this 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 can not store the information I need in this situation. The calculated time field information is stored in text format.
Follow my code
Common Time Calculation:
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 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'm relatively new to programming, can anyone identify what I'm doing wrong?