Calculo de Días laborales en access

Continuo trabajando con mi access de vacaciones pero ahora debo incluirle que me excluya los días festivos de los días de vacaciones, en esta página me encontré una función muy buena de José Bengoechea Ibaceta (Chea) pero no se como se utilizan estas funciones en un formulario.

Tengo otra función(=fOSUserName()) que también me encontré y me muestra el usuario de windows en un cuadro de texto con solo poner el nombre de la función en el Origen de control, pero con esta función(=DiasLaborables()) al intentar hacer lo mismo me envía un mensaje que la sintaxis es no valida.

Tal vez estoy confundido ya que en el tema de funciones no conozco nada, alguien me podría indicar como hago para implementarlo.

Lo que entiendo es que la función me va a excluir los días festivos, sábados y domingos al contar los días de vacaciones entre dos fechas.

¿Otra duda que tengo es si FechaHasta y FechaDesde se refiere a los nombres de los campos de texto del formulario en el que estoy digitando el rango de fechas de las vacaciones?

Cómo hago para que en el campo del formulario donde se me calcula los días que va a disfrutar de vacaciones se ejecute la función DiasLaborales.

Agradezco la ayuda que me puedan dar

'---------------------------------------------------------------------------------------
' Procedure : DiasLaborables
' DateTime  : 25/09/2005
' Author    : José Bengoechea Ibaceta (Chea)
' Purpose   : Calcular el número de días laborables entre dos fechas. Si se
'           : le pasan los argumentos opcionales NombreTablaFestivos y
'           : NombreCampoFestivo, tiene también en cuenta los días festivos
'           : que estén guardados en un campo con nombre NombreCampoFestivo
'           : en la tabla con nombre NombreTablaFestivos.
'            Estás autorizado a utilizar este código dentro de una aplicación
'            siempre que esta nota de autor permanezca inalterada.
'            En el caso de querer publicarlo en una página Web, por favor,
'            contactar con el autor en
'
'                 [email protected]
'---------------------------------------------------------------------------------------
'
Public Function DiasLaborables(FechaDesde As Date, FechaHasta As Date, Optional _
    NombreTablaFestivos As String, Optional NombreCampoFestivo As String) As Long
Dim Laborables As Long
   On Error GoTo DiasLaborables_Error
Laborables = 1 + (FechaHasta - FechaDesde)
If NombreTablaFestivos <> "" And NombreCampoFestivo <> "" Then
    Laborables = Laborables - DCount("*", NombreTablaFestivos, "[" & _
        NombreCampoFestivo & "] Between #" & Format(FechaDesde, "mm/dd/yyyy") & _
        "# AND #" & Format(FechaHasta, "mm/dd/yyyy") & "#")
End If
Laborables = Laborables - DateDiff("ww", FechaDesde, FechaHasta, vbSaturday)
Laborables = Laborables - DateDiff("ww", FechaDesde, FechaHasta, vbSunday)
Laborables = Laborables + (Weekday(FechaDesde, vbSunday) = 1)
Laborables = Laborables + (Weekday(FechaDesde, vbSaturday) = 1)
DiasLaborables = Laborables
   On Error GoTo 0
   Exit Function
DiasLaborables_Error:
    MsgBox "Error " & Err.Number & " (" & Err.Description & _
        ") in procedure DiasLaborables"
End Function

1 respuesta

Respuesta
2

La función de Chea no la puedes aplicar igual que la que te devuelve el usuario de windows porque tienes que indicarle al menos los dos parámetros obligatorios (FechaDesde y FechaHasta), que son los que indican entre qué fechas quieres calcular los días laborales.

Por tanto, lo único que tienes que hacer es poner la función con los dos argumentos requeridos (igual que haces con otras muchas funciones nativas de access), que los puedes poner "fijos", por ejemplo: =DiasLaborables(#08/01/2018#,#08/31/2018#), o referenciada a tus campos: =DiasLaborables([FechaInicial],[FechaFinal])

Un saludo.


Gracias por tu respuesta, ya me sa la cantidad de días pero la tabla de días festivos puse de ejemplo el 29/01/2018 y 30/01/2018 pero aun así me los cuenta.

¿Qué podrá ser?

Supongo que el error lo tienes en que no le pasas como argumento el nombre de la tabla de festivos...

Se me olvidó comentarte que en la web de Neckkito tienes dos ejemplos explicados para hacer esos cálculos: http://neckkito.xyz/nck/index.php

A la función le hice los siguientes cambios:

NombreTablaFestivos lo sustituí por mi tabla que se llama tbl_Festivos

NombreCampoFestivos lo sustituí por mi campo de tbl_Festivos que se llama dia_festivo

dia_festivo es de tipo fecha

FechaDesde es un campo de texto con formato fecha corta

FechaHasta es un campo de texto con formato fecha corta

Pero aun cuenta todo y días festivos...

Es que a la función no le tienes que tocar nada... solo pasarle los argumentos necesarios... Por ejemplo:

=DiasLaborables([FechaInicial],[FechaFinal],"TablaFestivos","DiaFestivo")

Donde FechaInicial y FechaFinal son dos cuadros de texto del formulario, TablaFestivos el nombre de la tabla donde tienes los festivos, y DiaFestivo el nombre del campo de la tabla anterior...

Si aún así no te aclaras, bájate los ejemplos de Neckkito, lee el pdf explicativo y mira cómo está hecha la BD de ejemplo.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas