Campo calculado de fecha, meses y años acccess 2007

Quiero calcular la antigüedad de los empleados de la empresa en la que estoy con la fecha de ingreso en access, de esa manera;

fecha ingreso: 10/05/2005

Antigüedad:10 meses, 8 años

¿Qué función podría usa para conseguir eso? ¿Con el texto al lado de meses y años?

Si me podrían ayudar

Respuesta
3

Inserta un módulo en tu Bd, lo puedes llamar como quieras, por ej: mdlCodigos, y le pegas esta función:

'--------------------------------------------------------------------------------------------
'Función para calcular la antigüedad de un trabajador en años y meses
'--------------------------------------------------------------------------------------------
Public Function fncAntiguedad(FechaAlta As Date) As String
Dim vAño As Double
Dim vMes As Double
Dim vDia As Double
If IsNull(FechaAlta) Then fncAntiguedad= "": Exit Function
If Month(FechaAlta) > Month(Date) Then
vAño= DateDiff("yyyy", FechaNac, Date) - 1
Else
vAño= DateDiff("yyyy", FechaNac, Date)
End If
If Day(FechaAlta) > Day(Date) Then
vMes = DateDiff("m", DateAdd("yyyy", vAño, FechaAlta), Date) - 1
Else
vMes = DateDiff("m", DateAdd("yyyy", vAño, FechaAlta), Date)
End If
Select Case vAño
Case 0
Select Case vMes
Case 0
vDia = DateDiff("d", FechaAlta, Date)
fncAntiguedad= vDia & IIf(vDia = 1, " día", " días")
Case 1
fncAntiguedad= vMes & " mes"
Case Else
fncAntiguedad= vMes & " meses"
End Select
Case 1
Select Case vMes
Case 0
fncAntiguedad= vAño & " año"
Case 1
fncAntiguedad= vAño & " año y " & vMes & " mes"
Case Else
fncAntiguedad= vAño & " año y " & vMes & " meses"
End Select
Case Else
Select Case vMes
Case 0
fncAntiguedad= vAño & " años"
Case 1
fncAntiguedad= vAño & " años y " & vMes & " mes"
Case Else
fncAntiguedad= vAño & " años y " & vMes & " meses"
End Select
End Select
End Function

Esta función la podras usar en consultas, formularios, código, etc, pasándole como parámetro la fecha de ingreso del trabajador: fncAntiguedad([fecha ingreso])

Hola!

La verdad en cierta forma no entendí, donde lo tendría que copiar ?

Creo un cuadro de texto ?

El código que te puse lo tienes que copiar en un módulo. Si tienes access 2007/2010, vas a la pestaña crear y buscas la opción de crear modulo (igual sólo te aparece la de crear macro, pero esta tiene un desplegable y ahí esta la opción de módulo). En access 2003, si no recuerdo mal, en la ventana de la base de datos hay un apartado "módulos" y ahí tienes la opción de crear uno nuevo.

Luego, la función la puedes usar en cualquier parte de la BD como las funciones que trae access predefinidas (consultas, formularios, informes...)

Ya copie todo eso en el modulo ahora como hago para que me calcule la aniguedad cada vez que cargo un nuevo Empleado a mi formulario ?

Abre tu formulario en vista diseño, y añades un nuevo cuadro de texto. Saca sus propiedades con el botón derecho, vete a la pestaña Otras, y en la fila Nombre, le cambias el que trae por este otro: txtAntiguedad.

Luego, saca las propiedades del campo Fecha ingreso, vete a la pestaña Eventos, colócate en el que dice Después de actualizar, y pincha en el botón de los 3 puntos que aparece a la derecha. Elige Generador de código, y en el editor de vba que se te abre, ahí donde te coloca el cursor (entre las lineas Private Sub... y End Sub) escribe esto:

If IsNull(Me.Fecha_Ingreso) Or Me.Fecha_Ingreso = "" Then
Me.txtAntiguedad = ""
Else
Me.txtAntiguedad = fncAntiguedad(Me.Fecha_Ingreso)
End If

Además, ese mismo código, lo tienes que poner en el evento Al activar registro del formulario.

Si tu campo no se llama "Fecha ingreso", tendrás que cambiarlo por el nombre que tu tengas.

Por cierto, acabo de encontrar un error en la fórmula que tendrás que corregir: despues de esta linea, al principio del código, "If IsNull(FechaAlta) Then fncAntiguedad= "": Exit Function", tienes que cambiar lo que te puse por lo que está en negrita a continuación.

If Month(FechaAlta) > Month(Date) Then
vAño= DateDiff("yyyy", FechaAlta, Date) - 1
Else
vAño= DateDiff("yyyy", FechaAlta, Date)
End If

Te adjunto un ejemplo para que veas cómo va, y a mayores cómo puedes usar la función en una consulta.

http://www.filebig.net/files/qJiQtyMSy2

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas