Empecemos por la función edad
La función tiene como sintaxis general:
Edad(FechaNacimiento [, FechaCalculo [, Tipo [, Resto]]])
Devuelve un valor de tipo Long
El único argumento obligatorio es FechaCalculo
(suponiendo que hoy sea el 19 de marzo de 2003
Edad (#9/3/1953#) devuelve 49
Edad (#9/3/1953#)
Es lo mismo que escribir
Edad (#9/3/1953#,#4/19/2003#)
Edad (#9/3/1953#,#4/19/2003#,teAños)
Edad (#9/3/1953#,#4/19/2003#,teAños,False)
Si queremos saber el número de meses transcurridos desde el 3 de septiembre
de 1953 hasta hoy escribiremos:
Edad (#9/3/1953#,,teMeses)
Si queremos saber el número de días transcurridos desde el 3 de septiembre
de 1953 hasta hoy escribiremos:
Edad (#9/3/1953#,,teDias)
Si ponemos el parámetro booleano [Resto] con el valor True nos devolverá el
resto en meses que queda descontados los años que han pasado entre dos
fechas, o el resto de días descontados los meses.
Por ejemplo
Si entre dos fechas han transcurrido 2 años, 3 meses y 12 días, como sucede
entre el 7 de enero de 2001 y el 19 de abril de 2003, si ponemos el
parámetro booleano [Resto] a True, la función Edad nos devolverá:
Si el parámetro [TipoEdad] vale teMeses nos devolverá 3
Edad (#1/7/2001# , #4/19/2003# , teMeses , True) --> 3
Si el parámetro [TipoEdad] vale teDias nos devolverá 12
Edad (#1/7/2001# , #4/19/2003# , teDias , True) --> 12
_______________________________________
Esta función es llamada por la función EdadAñosMesesDias, que devuelve una
cadena del tipo
"a años, m meses, d días"
Su sintaxis es:
EdadAñosMesesDias(FechaNacimiento [, FechaCalculo As Date])
Suponiendo que hoy sea el 19 de marzo de 2003
EdadAñosMesesDias (#1/7/2001#)
devolverá: 2 años, 3 meses, 12 días
EdadAñosMesesDias (#1/7/2001# , #4/30/2002#)
devolverá: 1 año, 3 meses, 23 días
Escribe en un módulo
_______________________________________
Public Enum TipoEdad
teAños
teMeses
teDias
End Enum
Public Function Edad( _
ByVal FechaNacimiento As Date, _
Optional ByVal FechaCalculo As Date = -100000, _
Optional ByVal Tipo As TipoEdad = teAños, _
Optional ByVal Resto As Boolean = False) _
As Long
' ****************************************************
' Devuelve entre dos fechas el período transcurrido en
' Años (Tipo = teAños), por defecto.
' Meses (Tipo = teMeses)
' Días (Tipo = teDias)
' Si el parámetro Resto es True
' devolverá el resto de meses (Tipo = teMeses)
' ó el resto de días (Tipo = teDias)
' eduardo@olaz.net
' Última revisión 19 de Abril de 2003
' ****************************************************
Dim strPeriodo As String
If FechaCalculo = -100000 Then
FechaCalculo = Date
End If
If FechaCalculo < FechaNacimiento Then
IntercambiaFechas FechaCalculo, FechaNacimiento
End If
Select Case Tipo
Case teAños
strPeriodo = "yyyy"
Case teMeses
strPeriodo = "m"
Case teDias
strPeriodo = "d"
Case Else
Exit Function
End Select
Select Case Tipo
Case teAños
Edad = DateDiff(strPeriodo, FechaNacimiento, FechaCalculo) _
+ Int(Format(FechaCalculo, "mmdd") _
< Format(FechaNacimiento, "mmdd"))
Case teMeses
Edad = DateDiff(strPeriodo, FechaNacimiento, FechaCalculo) _
+ Int(Format(FechaCalculo, "dd") _
< Format(FechaNacimiento, "dd"))
If Resto Then
Edad = Edad Mod 12
End If
Case teDias
If Resto Then
Dim datFechaInferior As Date
Dim lngMeses As Long
lngMeses = Edad(FechaNacimiento, FechaCalculo, teMeses)
datFechaInferior = DateAdd("m", lngMeses, FechaNacimiento)
Edad = Edad(datFechaInferior, FechaCalculo, teDias)
Else
Edad = FechaCalculo - FechaNacimiento
End If
Case Else
Exit Function
End Select
End Function
Public Function EdadAñosMesesDias( _
ByVal FechaNacimiento As Date, _
Optional ByVal FechaCalculo As Date = -100000) _
As String
' ****************************************************
' Devuelve, entre dos fechas,
' el periodo transcurrido en formato:
' "a años, m meses, d días"
' eduardo@olaz.net
' Última revisión 19 de Abril de 2003
' ****************************************************
Dim lngAños As Long
Dim lngMeses As Long
Dim lngDias As Long
Dim strAños As String
Dim strMeses As String
Dim strDias As String
Dim strSeparador As String
If FechaCalculo = -100000 Then
FechaCalculo = Date
End If
If FechaCalculo < FechaNacimiento Then
IntercambiaFechas FechaCalculo, FechaNacimiento
End If
lngAños = Edad( _
FechaNacimiento, _
FechaCalculo)
lngMeses = Edad( _
FechaNacimiento, _
FechaCalculo, _
teMeses, _
True)
lngDias = Edad( _
FechaNacimiento, _
FechaCalculo, _
teDias, _
True)
Select Case lngAños
Case 0
strAños = ""
Case 1
strAños = CStr(lngAños) & " año"
Case Else
strAños = CStr(lngAños) & " años"
End Select
Select Case lngMeses
Case 0
strMeses = ""
Case 1
strMeses = CStr(lngMeses) & " mes"
Case Else
strMeses = CStr(lngMeses) & " meses"
End Select
Select Case lngDias
Case 0
strDias = ""
Case 1
strDias = CStr(lngDias) & " día"
Case Else
strDias = CStr(lngDias) & " días"
End Select
If FechaCalculo - FechaNacimiento = 0 Then
EdadAñosMesesDias = "0 días"
Exit Function
End If
EdadAñosMesesDias = strAños
If lngMeses Then
If Len(EdadAñosMesesDias) Then
strSeparador = ", "
Else
strSeparador = ""
End If
EdadAñosMesesDias = EdadAñosMesesDias _
& strSeparador _
& strMeses
End If
If lngDias Then
If Len(EdadAñosMesesDias) Then
strSeparador = ", "
Else
strSeparador = ""
End If
EdadAñosMesesDias = EdadAñosMesesDias _
& strSeparador & _
strDias
End If
End Function
Private Sub IntercambiaFechas( _
ByRef Fecha1 As Date, _
ByRef Fecha2 As Date)
Dim datPuente As Date
datPuente = Fecha1
Fecha1 = Fecha2
Fecha2 = datPuente
End Sub
_______________________________________
Liándome con el código, se me había olvidado terminar de responder a tu
pregunta:
Pon el cuadro de texto en el que quieras mostrar la edad.
Cámbiale el nombre y ponle, por ejemplo, txtEdad
Si has puesto en un módulo el código anterior, será suficiente con que
pongas como origen del control en el control txtEdad
Origen del control................ =EdadAñosMesesDias([Fecha de Nacimiento])
Por cierto, también se me había olvidado indicar que el código de las
funciones es para access 2000 ó superior.
Con Access 97 no se puede usar constante enumerativas.
By Eduarado Olaz
               (
geocities.com/es/ensolva/Descargas)                   (
geocities.com/es/ensolva)                   (
geocities.com/es)