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