Access & VBA FAQ
| | | |
Indice de temas
Tablas
Consultas
Formularios
Informes
Macros
Módulos
Base de datos
Miscelánea
API
Utilidades
Problemas
Cadenas
Fechas
Todos los temas
Fechas : WorkingDays.
Autor/es:
Juan M Afán de Ribera
José Bengoechea Ibaceta (Chea)
Pregunta : ¿Existe alguna función que calcule los días laborables entre dos fechas?
Respuesta : En Access no existe tal función, pero podemos utilizar una que nos fabriquemos nosotros mismos. Asímismo, debemos tener en la base de datos una tabla en la que, manualmente, hayamos introducido las fechas de los días festivos que correspondan a la zona donde residimos (excepto aquellos que recaigan en sábado o domingo, pues la función ya los tendrá en cuenta)

Para este caso, podemos utilizar la función WorkingDays, la cual tiene los siguientes

Argumentos

ArgumentoDescripción
DateStartRequerido. La fecha a partir de la cual se empezarán a contar los días laborables
DateEndRequerido. La fecha límite para contar los días laborables
TableNameOpcional. Nombre de la tabla donde residen los días festivos que no sean sábados ni domingos
FieldNameOpcional. Nombre del campo de la tabla que contiene los días festivos
Ejemplo de uso:
' en este ejemplo se llama a la función WorkingDays para que calcule los días
' laborables que haya entre el 01/01/2005 y el 31/03/2005, especificando que
' los días festivos correspondientes a nuestra zona los hemos introducido en la
' la tabla tblDiasFestivos, en el campo DiaFestivo
DiasLaborables = WorkingDays("01/01/05", "31/03/05", "tblDiasFestivos", "DiaFestivo")
Esta función en un módulo estandar
''---------------------------------------------------------
' WorkingDays
'
' Código escrito originalmente por José Bengoechea Ibaceta
' (Chea) y Juan M Afán de Ribera.
' Estás autorizado a utilizarlo 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 los autores en
'
'     accessvba@ya.com
'
' Este código se brinda por cortesía de
' José Bengoechea Ibaceta (Chea)
' Juan M. Afán de Ribera
'
Function WorkingDays( _
                    DateStart As Date, _
                    DateEnd As Date, _
                    Optional TableName As String, _
                    Optional FieldName As String) As Long
Dim SQL As String
Dim Holidays As Long
Dim WeekendDays As Long
Dim loopDate As Date

    If DateStart < DateEnd Then
        SQL = "SELECT Count(*) FROM [" & TableName & "]" _
        & " WHERE [" & FieldName & "] Between #" _
        & Format(DateStart, "mm/dd/yyyy") _
        & "# AND #" & Format(DateEnd, "mm/dd/yyyy") & "#"
        
        On Error Resume Next
        Holidays = CurrentDb.OpenRecordset(SQL).Fields(0)
        On Error GoTo 0
        
        For loopDate = DateStart To DateEnd
            If Weekday(loopDate) = vbSaturday Or _
                Weekday(loopDate) = vbSunday Then
                WeekendDays = WeekendDays + 1
            End If
        Next
    
        WorkingDays = (DateEnd - DateStart) - (Holidays + WeekendDays)
    End If
    
End Function
'---------------------------------------------------------

Ejemplos:

 

Temas relacionados:

 

Última actualización: 6/6/2005