Функция определения количества рабочих дней

Аргументы: dtDate1 - начальная дата, dtDate2 - конечная дата, bUseHolidays - True - использовать таблицу праздников False - не использовать таблицу праздников
Назначение: Расчет количества рабочих дней выпадающих на заданный временной интервал
Возвращает: Количество рабочих дней.

Public Function WorkDays(ByVal dtDate1 As Date, ByVal dtDate2 As Variant, Optional ByVal bUseHolidays As Variant) As Long
Dim l As Long, wd1 As Integer, wd2 As Integer
Dim wd As Long

If IsMissing(bUseHolidays) Then
    bUseHolidays = False
End If
l = DateDiff("d", dtDate1, dtDate2, vbMonday)
wd1 = WeekDay(dtDate1, vbMonday)
wd2 = WeekDay(dtDate2, vbMonday)
wd = l - ((l + wd1 + (7 - wd2)) / 7&) * 2& + 1&
If wd1 = 7 Then
    wd = wd + 1
End If
If wd2 <= 5 Then
    wd = wd + 2
ElseIf wd2 = 6 Then
    wd = wd + 1
End If
If bUseHolidays Then
    wd = wd - DCount("*", "tblHolidays", "[Holiday] Between #" & _
    Format(dtDate1, "yyyy mm dd") & "# And #" & _
    Format(dtDate2, "yyyy mm dd") & "#")
End If
WorkDays = wd
End Function

Примечания:
Суббота и воскресенье считаются нерабочими днями.
Таблица праздников в данном примере называется "tblHolidays" и содержит одно поле "Holiday" типа Date/Time . В эту таблицу заносятся даты праздников которые не попадают на субботу и воскресенье.
Автор: из справочника ProgramAdvices


Страница сайта http://test.interface.ru
Оригинал находится по адресу http://test.interface.ru/home.asp?artId=8984