I have an Access Database that calculates the time between two dates; but the dates that are calculated, are not added to any table.
I can not find why they are not added.
The form code
Private Sub Comando8_Click()
CalculaTiempoTranscurrido CDate(Me.txtFechaI & " " & Me.txtHoraI), CDate(Me.txtFechaF & " " & Me.txtHoraF)
MsgBox "Años: " & TiempoTranscurrido.Años & Chr(13) & "Meses: " & TiempoTranscurrido.Meses & _
Chr(13) & "Dias: " & TiempoTranscurrido.Dias & Chr(13) & _
"Horas: " & TiempoTranscurrido.Horas & Chr(13) & "Minutos: " & TiempoTranscurrido.Minutos & _
Chr(13) & "Segundos: " & TiempoTranscurrido.Segundos, vbOKOnly + vbInformation, "TIEMPO TRANSCURRIDO"
End Sub
Private Sub Form_Open(Cancel As Integer)
Me.txtFechaF = Date
Me.txtFechaI = Date - 42
Me.txtHoraF = #5:30:00 PM#
Me.txtHoraI = #8:00:00 AM#
End Sub
The module code
Option Compare Database
'Tipo personalizado
Type TiempoT
Años As Integer
Meses As Integer
Dias As Integer
Horas As Integer
Minutos As Integer
Segundos As Integer
End Type
'TiempoTranscurrido es una variable publica definida de acuerdo al Tipo personalizado TiempoT
Public TiempoTranscurrido As TiempoT
'*******************************************************************************
'* CalculaTiempoTranscurrido
'* Calcula el tiempo transcurrido entre las dos fechas y horas pasadas como parámetros
'*******************************************************************************
Sub CalculaTiempoTranscurrido(datInicio As Date, datFin As Date)
Dim fechaCalculo As Date
'inicializamos los valores de la variable TiempoTranscurrido
TiempoTranscurrido.Años = 0
TiempoTranscurrido.Meses = 0
TiempoTranscurrido.Dias = 0
TiempoTranscurrido.Horas = 0
TiempoTranscurrido.Minutos = 0
TiempoTranscurrido.Segundos = 0
'si la Fecha Fin es menor que la de inicio salimos sin hacer los calculos
'En determinadas condiciones es posible que no nos importe recibir valores negativos
'en tal caso habrá que anular estas tres líneas
If datFin < datInicio Then
Exit Sub
End If
'En los calculos usamos fija la fecha Fin, la de inicio la iremos
'incrementando con la fracción ya computada.
fechaCalculo = datInicio
'Calculo de AÑOS
TiempoTranscurrido.Años = DateDiff("yyyy", fechaCalculo, datFin)
If Month(datFin) < Month(datInicio) Then
TiempoTranscurrido.Años = TiempoTranscurrido.Años - 1
ElseIf Month(datFin) = Month(datInicio) And Day(datFin) <= Day(datInicio) - 1 Then
TiempoTranscurrido.Años = TiempoTranscurrido.Años - 1
End If
'añadimos a fechaCalculo la fracción de tiempo que acabamos de computar
fechaCalculo = DateAdd("yyyy", TiempoTranscurrido.Años, fechaCalculo)
'Calculo de MESES
TiempoTranscurrido.Meses = DateDiff("m", fechaCalculo, datFin)
If Day(datFin) < Day(datInicio) Then
TiempoTranscurrido.Meses = TiempoTranscurrido.Meses - 1
End If
fechaCalculo = DateAdd("m", TiempoTranscurrido.Meses, fechaCalculo)
'Calculo de DIAS
TiempoTranscurrido.Dias = DateDiff("d", fechaCalculo, datFin)
If Hour(datFin) < Hour(datInicio) Then
TiempoTranscurrido.Dias = TiempoTranscurrido.Dias - 1
End If
fechaCalculo = DateAdd("d", TiempoTranscurrido.Dias, fechaCalculo)
'Calculo de HORAS
TiempoTranscurrido.Horas = DateDiff("h", fechaCalculo, datFin)
If Minute(datFin) < Minute(datInicio) Then
TiempoTranscurrido.Horas = TiempoTranscurrido.Horas - 1
End If
fechaCalculo = DateAdd("h", TiempoTranscurrido.Horas, fechaCalculo)
'Calculo de MINUTOS
TiempoTranscurrido.Minutos = DateDiff("n", fechaCalculo, datFin)
If Second(datFin) < Second(datInicio) Then
TiempoTranscurrido.Minutos = TiempoTranscurrido.Minutos - 1
End If
fechaCalculo = DateAdd("n", TiempoTranscurrido.Minutos, fechaCalculo)
'Calculo de Segundos
TiempoTranscurrido.Segundos = DateDiff("s", fechaCalculo, datFin)
End Sub
This code is adapted from link for a payroll project
Note: I am still in the process of learning VBA. Thank you very much.