|
|
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 | Argumento | Descripción | | DateStart | Requerido. La fecha a partir de la cual se empezarán a contar los días laborables | | DateEnd | Requerido. La fecha límite para contar los días laborables | | TableName | Opcional. Nombre de la tabla donde residen los días festivos que no sean sábados ni domingos | | FieldName | Opcional. 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: |
|