Usar la función SiInm con función Dlookup dentro de la lógica de la función.

A toda la comunidad, les comento, tengo una base de datos para el cálculo de las vacaciones de los colaboradores en la empresa, dicha base me calcula los días que les corresponden de acuerdo a los "años cumplidos" tanto en su periodo actual, y hasta 2 periodos anteriores, sin embargo, al querer hacer el cálculo a través de la diferencia de años cumplidos contra la fecha de ingreso,, me percate que el cambio al "siguiente periodo", lo hace desde 6 meses "antes" y hasta 6 meses "después" ya que ocupaba la siguiente Macro ((Fecha()-[Fecha_Ingreso])/365.25)

Al percatarme de ello, cambié la manera de realizar el calculo del periodo actual, y con base en el cálculo de los meses cumplidos, cree una tabla en donde a través de la función Dlookup se pueda buscar los días correspondientes en la tabla llamada [VacacionesMeses]. Dicha tabla contiene las columnas Año, Meses, Días Correspondientes.

Sin embargo, tengo el mismo problema pero ahora en días, es decir, hasta 15 días después de cumplido ese mes se hace el cálculo al siguiente periodo y lo que requiero es que al cumplirse el mismo día y mes en años posteriores, me pueda calcular los días que corresponden.

La lógica de la función sería algo así:

Si el día y el mes de la fecha de ingreso son iguales al día y mes de la fecha actual, entonces sumar "1" en el resultado del cálculo de la diferencia de meses, y después busque con ese resultado, los días que le corresponden en la tabla [VacacionesMeses]

Les agradezco de antemano su apoyo y si hubiera algún otro modo de calcular lo que requiero.

1 Respuesta

Respuesta
2

No sé si lo he entendido bien, pero si tengo la tabla Empleados

Y la tabla Libres, que muestra los días libres en función de los meses trabajados(ya que no sé como es la tuya)

Hago el formulario

Elijo a Pepe que si miras la tabla hoy cumple el año trabajando

El código del evento Después de actualizar del combinado, al que yo he llamado Elegir es

Private Sub Elegir_AfterUpdate()
Texto12 = DLookup("fechaingreso", "empleados", "idempleado=" & Me.Elegir & "")
MesesReales = CInt((Date - DLookup("fechaingreso", "empleados", "idempleado=" & Me.Elegir & "")) / 30.27)
If Format(DLookup("fechaingreso", "empleados"), "dd/mm") = Format(Date, "dd/mm") Then
MesesComputo = MesesReales + 1
Texto2 = DLookup("diaslibres", "libres", "meses=" & MesesComputo & "")
Else
MesesComputo = MesesReales
Texto2 = DLookup("diaslibres", "libres", "meses=" & MesesReales & "")
End If
End Sub

Hola Icue! muchas gracias por tu aporte eso es lo que buscaba! Sin embargo me podrías apoyar a como darle estructura en mi base? Porque la verdad es que el cerebro ya no me da jajaja

Este es el formulario de como se vería de manera general. Sólo no le hagas caso los campos de Dif_MesesAnt y Dif_Meses_Penultimo jaja

esta es la tabla de los meses que te comentaba.

y esta la tabla de años.

Private Sub Años_Actual_GotFocus()
Años_Actual = DLookup("[AntiguedadAños]", "[VacacionesMeses]", "AntiguedadMeses=" & [Dif_Meses_Actual])
End Sub
Private Sub Años_Ant_GotFocus()
Años_Ant = (DLookup("[AntiguedadAños]", "[VacacionesMeses]", "AntiguedadMeses=" & [Dif_Meses_Actual])) - 1
End Sub
Private Sub Años_Penultimo_GotFocus()
Años_Penultimo = (DLookup("[AntiguedadAños]", "[VacacionesMeses]", "AntiguedadMeses=" & [Dif_Meses_Actual])) - 2
End Sub
Private Sub Dias_Correspondientes_Actual_GotFocus()
Dias_Correspondientes_Actual = DLookup("[Dias_Correspondientes]", "[VacacionesMeses]", "AntiguedadMeses=" & [Dif_Meses_Actual])
End Sub
Private Sub Dias_Correspondientes_Ant_GotFocus()
Dias_Correspondientes_Ant = DLookup("[Días_Correspondientes]", "[VacacionesAños]", "Antigüedad=" & [Años_Ant])
End Sub
Private Sub Dias_Correspondientes_Penultimo_GotFocus()
Dias_Correspondientes_Penultimo = DLookup("[Días_Correspondientes]", "[VacacionesAños]", "Antigüedad=" & [Años_Penultimo])
End Sub

y este el código de las funciones, en su caso dónde debería de insertar la función If que me diste?? Gracias!!

Ahora mismo estoy de vacaciones en la playa, y no tengo internet. Por eso sólo me conecto cuando voy a tomar café al bar de enfrente. Por eso, creo que es mejor, que si quieres, repito, si quieres, mándame una copia de las tablas a [email protected] y trataré de prepararte un ejemplo.

Si lo haces, en el asunto del mensaje pon tu alias Ivan Hernan, ya que si no sé quien me escribe ni los abro.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas