--------------------------------------------------------------------------
¡Importante!: Colabora con el grupo.Contesta a este mensaje y dinos si te
sirvió o no la respuesta dada. Muchas gracias
--------------------------------------------------------------------------
Hola!
despues de revisar ese código, que tiene un puñado de años, hoy lo variarís
un poco, lo haría así:
Type Edad
Dias As Byte
Meses As Byte
Años As Integer
End Type
'*******************************************************************************
'* Devuelve los días, los meses y los años transcurridos entre dos fechas
'* deberá incluir la siguiente en la sección de declaraciones de un modulo
'* Type Edad
'* Dias As Byte
'* Meses As Byte
'* Años As Integer
'* End Type
'* uso: Edad("15/1/01", Date).Dias devuelve los dias transcurridos desde el
'* 15/01/01 hasta hoy
'* ESH 06/06/11 19:27 replanteada
'* ESH 01/06/01 19:52
'*******************************************************************************
Public Function Edad(ByRef datFechaInicio As Date, ByRef datFechaFin As
Date) As Edad
Dim bytDias As Integer, _
bytMeses As Byte, _
intAños As Integer, _
datPrimeraFecha As Date, _
datSegundaFecha As Date
' ordeno correctamente las fechas
If datFechaInicio < datFechaFin Then
datPrimeraFecha = datFechaInicio
datSegundaFecha = datFechaFin
Else
datSegundaFecha = datFechaInicio
datPrimeraFecha = datFechaFin
End If
' calculo la diferencia en años
intAños = DateDiff("yyyy", datPrimeraFecha, datSegundaFecha)
If Format$(datSegundaFecha, "mmdd") < Format$(datPrimeraFecha, "mmdd") Then
intAños = intAños - 1
End If
' calculo la diferencia en meses
datPrimeraFecha = DateAdd("yyyy", intAños, datPrimeraFecha)
bytMeses = DateDiff("m", datPrimeraFecha, datSegundaFecha)
' calculo la diferencia en días
datPrimeraFecha = DateAdd("m", bytMeses, datPrimeraFecha)
bytDias = DateDiff("d", datPrimeraFecha, datSegundaFecha)
' si la diferencia en días fuera negativa recalculo días y meses
If bytDias < 0 Then
bytMeses = bytMeses - 1
bytDias = DateDiff("d", DateAdd("m", -1, datPrimeraFecha),
datSegundaFecha)
End If
' en cada caso devuelvo su valor
Edad.Dias = bytDias
Edad.Meses = bytMeses
Edad.Años = intAños
End Function ' Edad
Sub pruebaEdad()
Dim LaEdad As Edad, datFechaInicio As Date, datFechaFin As Date
For datFechaInicio = #1/15/2001# To Date
LaEdad = Edad(datFechaInicio, Date)
Debug.Print "Entre el " & Format$(datFechaInicio, "dd/mm/yy") & " y hoy
han transcurrido " & LaEdad.Años & " años, " & LaEdad.Meses & " meses y " &
LaEdad.Dias & " días"
' reconstruyo la fecha para verificar el resultado
Debug.Print DateAdd("d", LaEdad.Dias, DateAdd("m", LaEdad.Meses,
DateAdd("yyyy", LaEdad.Años, datFechaInicio)))
Next datFechaInicio
End Sub
Saludos a todos desde Huelva
Emilio [MS-MVP Access 2006/11]
miliuco56 ALGARROBA hotmail PUNTO com
http://www.mvp-access.com/foro
http://www.mvp-access.es/emilio
"Jos� M� Fueyo" <***@gmail.com> escribi� en el mensaje de noticias news:dd73f755-5505-41c6-8077-***@k17g2000vbn.googlegroups.com...
Hola.
Tendrás que crear un informe con los dos campos, y un tecer campo
cálculado que tiene como valor el resultado de aplicar la función de
cálculo sobre los otros dos campos. Nada más dificil.
Espero que te oriente.
Salu2
--
José Mª Fueyo
[MS MVP Access]
__________ Information from ESET Smart Security, version of virus signature
database 6184 (20110606) __________
The message was checked by ESET Smart Security.
http://www.eset.com
__________ Information from ESET Smart Security, version of virus signature database 6185 (20110606) __________
The message was checked by ESET Smart Security.
http://www.eset.com