Gabriel: Al igual que llamas a esa Función desde la Consulta, haz lo mismo con ésta
Public Function FncDiferenciaFechas(ByVal LaFechaIni As Date, ByVal LaFechaFin As Date) As String
'A) En una consulta: Añades una nueva columna y le pones: DiferenciaFechas: FncDiferenciaFechas ([Fecha1];[Fecha2]) >> Fecha1 es la mas ANTIGUA
'B) En un TExtBox independiente en tu Formulario/Informe:
'Una opción sería ponerle la misma expresión en el origen del control del cuadro.
'Otra opción sería que muestre la diferencia al poner las Fechas, en cuyo caso en el evento AfterUpdate de tus Campos Fecha1 y Fecha2, les generas este código:
'If Not IsNull(Me.Fecha1) And Not IsNull(Me.Fecha2) Then
'Me.Diferencia = FncDiferenciaFechas(Me.Fecha1, Me.Fecha2)
'Else
'Lo que sea
'End If
'Y le pondrás el mismo código al evento Al Activar Registro del Formulario.
'Obviamente tendrás que cambiar Fecha1, Fecha2 y Diferencia por los Nombres que tú tengas a tus campos.
Dim vAño As Double
Dim vMes As Double
Dim vDia As Double
Dim Temp As Date
'Si no se metió alguna de las dos fechas, salimos sin más
If IsNull(LaFechaIni) Or IsNull(LaFechaFin) Then
FncDiferenciaFechas = ""
Exit Function
End If
'Comprobamos que la fecha inicial sea más antigua que la final
If LaFechaIni > LaFechaFin Then
Temp = LaFechaIni
LaFechaIni = LaFechaFin
LaFechaFin = Temp
ElseIf LaFechaIni = LaFechaFin Then 'Si las dos fechas son la misma
FncDiferenciaFechas = "0 días"
Exit Function
End If
'Calculas la diferencia en años
If Month(LaFechaIni) > Month(LaFechaFin) Then
vAño = DateDiff("yyyy", LaFechaIni, LaFechaFin) - 1
Else
vAño = DateDiff("yyyy", LaFechaIni, LaFechaFin)
End If
'Calculas la diferencia en meses
If Day(LaFechaIni) > Day(LaFechaFin) Then
vMes = DateDiff("m", DateAdd("yyyy", vAño, LaFechaIni), LaFechaFin) - 1
If vMes < 0 Then
vMes = 12 + vMes
vAño = vAño - 1
End If
Else
vMes = DateDiff("m", DateAdd("yyyy", vAño, LaFechaIni), LaFechaFin)
End If
'Calculas la diferencia en días
vDia = DateDiff("d", DateAdd("m", vAño * 12 + vMes, LaFechaIni), LaFechaFin) ' Mod 7
'Construyes la expresión
If vAño = 1 Then
FncDiferenciaFechas = vAño & " año"
ElseIf vAño > 1 Then
FncDiferenciaFechas = vAño & " años"
End If
If vMes = 1 Then
FncDiferenciaFechas = IIf(FncDiferenciaFechas = "", "", FncDiferenciaFechas & " y ") & vMes & " mes"
ElseIf vMes > 1 Then
FncDiferenciaFechas = IIf(FncDiferenciaFechas = "", "", FncDiferenciaFechas & " y ") & vMes & " meses"
End If
If vDia = 1 Then
FncDiferenciaFechas = IIf(FncDiferenciaFechas = "", "", FncDiferenciaFechas & " y ") & vDia & " día"
ElseIf vDia > 1 Then
FncDiferenciaFechas = IIf(FncDiferenciaFechas = "", "", FncDiferenciaFechas & " y ") & vDia & " días"
End If
End Function 'FncDiferenciaFechas(ByVal laFechaIni As Date, ByVal laFechaFin As Date) As String
Esta función es de Neckkito o Svenvjorn y yo la tengo aplicada y Funciona.
Una muestra:
Mis saludos >> Jacinto