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

    Source: geocities.com/es/ensolva/Descargas/Documentos

               ( geocities.com/es/ensolva/Descargas)                   ( geocities.com/es/ensolva)                   ( geocities.com/es)