Foro VBATotal

Aprender a programar en Visual Basic

Por favor, o Regístrate para crear mensajes y debates.

Restar Fechas

Tengo una duda acerca de como configurar una macro que me permita calcular la edad de una persona partiendo desde la Fecha de Nacimiento (TextBox6) hasta la Fecha del Evento (TextBox8) que adicionalmente ajuste la edad si aún la persona no ha tenido su cumpleaños y que el resultado quede reflejado en el TextBox9 he intentado replicar cosas que he visto por allí con DateDiff pero no obtengo el resultado que deseo

Mucho les sabre agradecer la ayuda que me puedan brindar

Buenos días Jues,

Prueba con esto:

TextBox9 = Fix((TextBox8 - TextBox6) / 365.24)

Saludos.

Por favor, si te he ayudado, haz clic en algún banner publicitario. Es una gran manera de ayudarme. También puedes realizar una donación en Paypal por la cantidad que desees https://paypal.me/vbatotal
Cita de Administrador en 24 de enero de 2024, 09:35

Buenos días Jues,

Prueba con esto:

TextBox9 = Fix((TextBox8 - TextBox6) / 365.24)

Saludos.

Saludos @fito espero estés bien probé lo que me enviaste y no me devuelve el resultado esperado de hecho no me muestra nada en el TextBox3 (por equivocación te indiqué que era el TextBox9) te voy a poner en contexto en i proyecto debo de calcular dos datos Edad (TextBox3) y Antigüedad (TextBox9)
a partir de tres fechas: Fecha Nacimiento (TextBox6), Fecha Ingreso (TextBox7) y Fecha del Evento (TextBox8) en la actualidad tengo esta macro para calcular la edad:

Private Sub TextBox6_Change()

' Calculo de la Edad
' Definir una variable para la fecha de nacimiento
Dim fechaNacimiento As Date

' Asignar la fecha de nacimiento
fechaNacimiento = TextBox6

' Obtener la fecha actual
Dim fechaActual As Date
fechaActual = Date

' Calcular la Edad
Dim edad As Integer
edad = Year(fechaActual) - Year(fechaNacimiento)

' Ajustar la edad si aún no ha tenido su cumpleaños este año
If fechaNacimiento > DateSerial(Year(fechaActual), Month(fechaActual), Day(fechaNacimiento)) Then
edad = edad - 1
End If

' Mostrar el resultado en la ventana de mensajes
TextBox3 = edad

End Sub

Sin embargo, calcula la edad en base a la resta la Fecha Nacimiento (TextBox6) menos la Fecha Actual pero lo que necesito es calcular la edad de una persona partiendo desde la Fecha de Nacimiento (TextBox6) hasta la Fecha del Evento (TextBox8) como te indique en mi primer mensaje, he intentado modificarla de la siguiente forma

Private Sub TextBox6_Change()

' Calculo de la Edad
Dim fechaNacimiento As Date
Dim fechaAccidente As Date

fechaNacimiento = TextBox6
fechaAccidente = TextBox8

Dim edad As Integer
edad = Year(fechaAccidente) - Year(fechaNacimiento)

If fechaAccidente > DateSerial(Year(fechaNacimiento), Month(fechaNacimiento), Day(fechaNacimiento)) Then
edad = edad - 1
End If

TextBox3 = edad

End Sub

Pero al introducir los datos en el orden que los tengo (TextBox6, TextBox7, TextBox8) al apenas introducir la fecha de nacimiento (TextBox6) me indica que “Se ha producido un error 13 en tiempo de ejecución: No coinciden los tipos” pero si introduzco primero la fecha del evento (TextBox8) y luego los otros datos (fecha de nacimiento (TextBox6) y fecha de ingreso (TextBox7)) si me arroja el resultado esperado en la casilla Edad (TextBox3) pero no me arroja resultados en la Antigüedad (TextBox9)

Te adjunto mi proyecto para que puedas revisar más detalladamente

Usuario: Prueba
Clave: Prueba12345

Agradecido de antemano

Archivos subidos:
  • Tienes que conectarte para acceder a las subidas.

He movido el tema al foro de Excel. Lo habías abierto en el de Access.

Le echo un vistazo y te digo algo.

Saludos.

Por favor, si te he ayudado, haz clic en algún banner publicitario. Es una gran manera de ayudarme. También puedes realizar una donación en Paypal por la cantidad que desees https://paypal.me/vbatotal

Buenos días,

Adjunto el programa funcionando.

He añadido el siguiente código en los eventos de actualización de los textbox 6 y 8,

edad = DateDiff("y", Me.TextBox6, Me.TextBox8) / 365.24
TextBox3 = Fix(edad)

Para trabajar más rápido, he desactivado cositas del programa. Te recomiendo copiar este código en el tuyo y trabajar con tu versión.

Saludos.

Archivos subidos:
  • Tienes que conectarte para acceder a las subidas.
Por favor, si te he ayudado, haz clic en algún banner publicitario. Es una gran manera de ayudarme. También puedes realizar una donación en Paypal por la cantidad que desees https://paypal.me/vbatotal

Saludos @fito espero estes bien

Me funciono esta solucion y te la comparto

Private Sub TextBox6_Change()

'Calculo de la Edad
If TextBox6.Value = "" Then Exit Sub
TextBox3 = Age(TextBox6.Value)

End Sub

Function Age(varBirthDate As Variant) As Integer

' Calculo de la Edad
Dim varAge As Variant

If IsNull(varBirthDate) Then Age = 0: Exit Function

varAge = DateDiff("yyyy", varBirthDate, Now)
If Date < DateSerial(Year(Now), Month(varBirthDate), _
Day(varBirthDate)) Then
varAge = varAge - 1
End If
Age = CInt(varAge)
End Function

Agradecido por tus respuestas a mis inquietudes

Gracias por el aporte 😉

JUES ha reaccionado a esta publicacion.
JUES
Por favor, si te he ayudado, haz clic en algún banner publicitario. Es una gran manera de ayudarme. También puedes realizar una donación en Paypal por la cantidad que desees https://paypal.me/vbatotal

Contacto