Public Function DiffWeekdays(datDay1 As Date, datDay2 As Date) As Long
' Comments : Returns the number of weekdays between two dates
' The days are rounded down (it takes 24 hours to make a day)
' Parameters: datDay1 - first (earlier) date/time
' (subtracted from datDay2)
' datDay2 - second (later) date/time
' Returns : Number of whole business days between two dates
' (Returns negative days if datDay1 is after datDay2)
' Source : Total Visual SourceBook 2000
'
Dim lngDays As Long
Dim lngWeeks As Long
Dim datFirstDate As Date
Dim datLastDate As Date
Dim datNewDate As Date
Dim intDirection As Integer
On Error GoTo PROC_ERR
If datDay1 < datDay2 Then
datFirstDate = datDay1
datLastDate = datDay2
intDirection = 1
Else
datFirstDate = datDay2
datLastDate = datDay1
intDirection = -1
End If
' Subtract weekends
lngWeeks = Fix(Fix(datLastDate - datFirstDate) / 7)
lngDays = lngWeeks * 5
datNewDate = CDate(datFirstDate) + lngWeeks * 7
While datNewDate < datLastDate
datNewDate = datNewDate + 1
If datNewDate <= datLastDate Then
' Don't count days when new day is Sunday or Monday.
' (When new day is Saturday, you are actually counting Friday)
If WeekDay(datNewDate) <> 1 And WeekDay(datNewDate) <> 2 Then
lngDays = lngDays + 1
End If
End If
Wend
DiffWeekdays = intDirection * lngDays
PROC_EXIT:
Exit Function
PROC_ERR:
MsgBox "Error: " & Err.Number & ". " & Err.Description, , _
"DiffWeekdays"
Resume PROC_EXIT
End Function