home *** CD-ROM | disk | FTP | other *** search
- Function HOLIDAY (YR As Integer, HDAY As Integer) As Variant
- If YR < 0 Or YR > 9999 Or HDAY < 1 Or HDAY > 10 Then 'CHECK FOR INVALID PARAMETERS
- HOLIDAY = 0 'AND RETURN AN ERROR IF DETECTED
- Exit Function
- End If
- Dim TEMP As Long
- Select Case HDAY
- Case Is = 1 'MARTIN LUTHER KING DAY
- TEMP = DateSerial(YR, 1, 1)
- For X = 1 To 7
- If Weekday(TEMP) = 2 Then 'LOOP UNTIL MONDAY IS FOUND
- HOLIDAY = DateSerial(YR, 1, X + 14) 'JUMP TO 3RD MONDAY
- Exit Function
- Else
- TEMP = TEMP + 1
- End If
- Next X
- Case Is = 2 'PRESIDENTS DAY
- TEMP = DateSerial(YR, 2, 1)
- For X = 1 To 7
- If Weekday(TEMP) = 2 Then 'LOOP UNTIL MONDAY IS FOUND
- HOLIDAY = DateSerial(YR, 2, X + 14) 'JUMP TO 3RD MONDAY
- Exit Function
- Else
- TEMP = TEMP + 1
- End If
- Next X
- Case Is = 3 'EASTER
- TEMP = (YR Mod 19) + 1
- Select Case TEMP
- Case Is = 1
- TEMP = DateSerial(YR, 4, 14)
- If Weekday(TEMP) = 1 Then
- TEMP = TEMP + 7
- HOLIDAY = DateSerial(YR, Month(TEMP), Day(TEMP))
- Exit Function
- Else
- For X = 1 To 7
- If Weekday(TEMP) = 1 Then 'LOOP UNTIL SUNDAY IS FOUND
- HOLIDAY = DateSerial(YR, Month(TEMP), Day(TEMP))
- Exit Function
- Else
- TEMP = TEMP + 1
- End If
- Next X
- End If
- Case Is = 2
- TEMP = DateSerial(YR, 4, 3)
- If Weekday(TEMP) = 1 Then
- TEMP = TEMP + 7
- HOLIDAY = DateSerial(YR, Month(TEMP), Day(TEMP))
- Exit Function
- Else
- For X = 1 To 7
- If Weekday(TEMP) = 1 Then 'LOOP UNTIL SUNDAY IS FOUND
- HOLIDAY = DateSerial(YR, Month(TEMP), Day(TEMP))
- Exit Function
- Else
- TEMP = TEMP + 1
- End If
- Next X
- End If
- Case Is = 3
- TEMP = DateSerial(YR, 3, 23)
- If Weekday(TEMP) = 1 Then
- TEMP = TEMP + 7
- HOLIDAY = DateSerial(YR, Month(TEMP), Day(TEMP))
- Exit Function
- Else
- For X = 1 To 7
- If Weekday(TEMP) = 1 Then 'LOOP UNTIL SUNDAY IS FOUND
- HOLIDAY = DateSerial(YR, Month(TEMP), Day(TEMP))
- Exit Function
- Else
- TEMP = TEMP + 1
- End If
- Next X
- End If
- Case Is = 4
- TEMP = DateSerial(YR, 4, 11)
- If Weekday(TEMP) = 1 Then
- TEMP = TEMP + 7
- HOLIDAY = DateSerial(YR, Month(TEMP), Day(TEMP))
- Exit Function
- Else
- For X = 1 To 7
- If Weekday(TEMP) = 1 Then 'LOOP UNTIL SUNDAY IS FOUND
- HOLIDAY = DateSerial(YR, Month(TEMP), Day(TEMP))
- Exit Function
- Else
- TEMP = TEMP + 1
- End If
- Next X
- End If
- Case Is = 5
- TEMP = DateSerial(YR, 3, 31)
- If Weekday(TEMP) = 1 Then
- TEMP = TEMP + 7
- HOLIDAY = DateSerial(YR, Month(TEMP), Day(TEMP))
- Exit Function
- Else
- For X = 1 To 7
- If Weekday(TEMP) = 1 Then 'LOOP UNTIL SUNDAY IS FOUND
- HOLIDAY = DateSerial(YR, Month(TEMP), Day(TEMP))
- Exit Function
- Else
- TEMP = TEMP + 1
- End If
- Next X
- End If
- Case Is = 6
- TEMP = DateSerial(YR, 4, 18)
- If Weekday(TEMP) = 1 Then
- TEMP = TEMP + 7
- HOLIDAY = DateSerial(YR, Month(TEMP), Day(TEMP))
- Exit Function
- Else
- For X = 1 To 7
- If Weekday(TEMP) = 1 Then 'LOOP UNTIL SUNDAY IS FOUND
- HOLIDAY = DateSerial(YR, Month(TEMP), Day(TEMP))
- Exit Function
- Else
- TEMP = TEMP + 1
- End If
- Next X
- End If
- Case Is = 7
- TEMP = DateSerial(YR, 4, 8)
- If Weekday(TEMP) = 1 Then
- TEMP = TEMP + 7
- HOLIDAY = DateSerial(YR, Month(TEMP), Day(TEMP))
- Exit Function
- Else
- For X = 1 To 7
- If Weekday(TEMP) = 1 Then 'LOOP UNTIL SUNDAY IS FOUND
- HOLIDAY = DateSerial(YR, Month(TEMP), Day(TEMP))
- Exit Function
- Else
- TEMP = TEMP + 1
- End If
- Next X
- End If
- Case Is = 8
- TEMP = DateSerial(YR, 3, 28)
- If Weekday(TEMP) = 1 Then
- TEMP = TEMP + 7
- HOLIDAY = DateSerial(YR, Month(TEMP), Day(TEMP))
- Exit Function
- Else
- For X = 1 To 7
- If Weekday(TEMP) = 1 Then 'LOOP UNTIL SUNDAY IS FOUND
- HOLIDAY = DateSerial(YR, Month(TEMP), Day(TEMP))
- Exit Function
- Else
- TEMP = TEMP + 1
- End If
- Next X
- End If
- Case Is = 9
- TEMP = DateSerial(YR, 4, 16)
- If Weekday(TEMP) = 1 Then
- TEMP = TEMP + 7
- HOLIDAY = DateSerial(YR, Month(TEMP), Day(TEMP))
- Exit Function
- Else
- For X = 1 To 7
- If Weekday(TEMP) = 1 Then 'LOOP UNTIL SUNDAY IS FOUND
- HOLIDAY = DateSerial(YR, Month(TEMP), Day(TEMP))
- Exit Function
- Else
- TEMP = TEMP + 1
- End If
- Next X
- End If
- Case Is = 10
- TEMP = DateSerial(YR, 4, 5)
- If Weekday(TEMP) = 1 Then
- TEMP = TEMP + 7
- HOLIDAY = DateSerial(YR, Month(TEMP), Day(TEMP))
- Exit Function
- Else
- For X = 1 To 7
- If Weekday(TEMP) = 1 Then 'LOOP UNTIL SUNDAY IS FOUND
- HOLIDAY = DateSerial(YR, Month(TEMP), Day(TEMP))
- Exit Function
- Else
- TEMP = TEMP + 1
- End If
- Next X
- End If
- Case Is = 11
- TEMP = DateSerial(YR, 3, 25)
- If Weekday(TEMP) = 1 Then
- TEMP = TEMP + 7
- HOLIDAY = DateSerial(YR, Month(TEMP), Day(TEMP))
- Exit Function
- Else
- For X = 1 To 7
- If Weekday(TEMP) = 1 Then 'LOOP UNTIL SUNDAY IS FOUND
- HOLIDAY = DateSerial(YR, Month(TEMP), Day(TEMP))
- Exit Function
- Else
- TEMP = TEMP + 1
- End If
- Next X
- End If
- Case Is = 12
- TEMP = DateSerial(YR, 4, 13)
- If Weekday(TEMP) = 1 Then
- TEMP = TEMP + 7
- HOLIDAY = DateSerial(YR, Month(TEMP), Day(TEMP))
- Exit Function
- Else
- For X = 1 To 7
- If Weekday(TEMP) = 1 Then 'LOOP UNTIL SUNDAY IS FOUND
- HOLIDAY = DateSerial(YR, Month(TEMP), Day(TEMP))
- Exit Function
- Else
- TEMP = TEMP + 1
- End If
- Next X
- End If
- Case Is = 13
- TEMP = DateSerial(YR, 4, 2)
- If Weekday(TEMP) = 1 Then
- TEMP = TEMP + 7
- HOLIDAY = DateSerial(YR, Month(TEMP), Day(TEMP))
- Exit Function
- Else
- For X = 1 To 7
- If Weekday(TEMP) = 1 Then 'LOOP UNTIL SUNDAY IS FOUND
- HOLIDAY = DateSerial(YR, Month(TEMP), Day(TEMP))
- Exit Function
- Else
- TEMP = TEMP + 1
- End If
- Next X
- End If
- Case Is = 14
- TEMP = DateSerial(YR, 3, 22)
- If Weekday(TEMP) = 1 Then
- TEMP = TEMP + 7
- HOLIDAY = DateSerial(YR, Month(TEMP), Day(TEMP))
- Exit Function
- Else
- For X = 1 To 7
- If Weekday(TEMP) = 1 Then 'LOOP UNTIL SUNDAY IS FOUND
- HOLIDAY = DateSerial(YR, Month(TEMP), Day(TEMP))
- Exit Function
- Else
- TEMP = TEMP + 1
- End If
- Next X
- End If
- Case Is = 15
- TEMP = DateSerial(YR, 4, 10)
- If Weekday(TEMP) = 1 Then
- TEMP = TEMP + 7
- HOLIDAY = DateSerial(YR, Month(TEMP), Day(TEMP))
- Exit Function
- Else
- For X = 1 To 7
- If Weekday(TEMP) = 1 Then 'LOOP UNTIL SUNDAY IS FOUND
- HOLIDAY = DateSerial(YR, Month(TEMP), Day(TEMP))
- Exit Function
- Else
- TEMP = TEMP + 1
- End If
- Next X
- End If
- Case Is = 16
- TEMP = DateSerial(YR, 3, 30)
- If Weekday(TEMP) = 1 Then
- TEMP = TEMP + 7
- HOLIDAY = DateSerial(YR, Month(TEMP), Day(TEMP))
- Exit Function
- Else
- For X = 1 To 7
- If Weekday(TEMP) = 1 Then 'LOOP UNTIL SUNDAY IS FOUND
- HOLIDAY = DateSerial(YR, Month(TEMP), Day(TEMP))
- Exit Function
- Else
- TEMP = TEMP + 1
- End If
- Next X
- End If
- Case Is = 17
- TEMP = DateSerial(YR, 4, 17)
- If Weekday(TEMP) = 1 Then
- TEMP = TEMP + 7
- HOLIDAY = DateSerial(YR, Month(TEMP), Day(TEMP))
- Exit Function
- Else
- For X = 1 To 7
- If Weekday(TEMP) = 1 Then 'LOOP UNTIL SUNDAY IS FOUND
- HOLIDAY = DateSerial(YR, Month(TEMP), Day(TEMP))
- Exit Function
- Else
- TEMP = TEMP + 1
- End If
- Next X
- End If
- Case Is = 18
- TEMP = DateSerial(YR, 4, 7)
- If Weekday(TEMP) = 1 Then
- TEMP = TEMP + 7
- HOLIDAY = DateSerial(YR, Month(TEMP), Day(TEMP))
- Exit Function
- Else
- For X = 1 To 7
- If Weekday(TEMP) = 1 Then 'LOOP UNTIL SUNDAY IS FOUND
- HOLIDAY = DateSerial(YR, Month(TEMP), Day(TEMP))
- Exit Function
- Else
- TEMP = TEMP + 1
- End If
- Next X
- End If
- Case Is = 19
- TEMP = DateSerial(YR, 3, 27)
- If Weekday(TEMP) = 1 Then
- TEMP = TEMP + 7
- HOLIDAY = DateSerial(YR, Month(TEMP), Day(TEMP))
- Exit Function
- Else
- For X = 1 To 7
- If Weekday(TEMP) = 1 Then 'LOOP UNTIL SUNDAY IS FOUND
- HOLIDAY = DateSerial(YR, Month(TEMP), Day(TEMP))
- Exit Function
- Else
- TEMP = TEMP + 1
- End If
- Next X
- End If
- End Select
- Case Is = 4 'MOTHERS DAY
- TEMP = DateSerial(YR, 5, 1)
- For X = 1 To 7
- If Weekday(TEMP) = 1 Then 'LOOP UNTIL SUNDAY IS FOUND
- HOLIDAY = DateSerial(YR, 5, X + 7) 'JUMP TO 2RD SUNDAY
- Exit Function
- Else
- TEMP = TEMP + 1
- End If
- Next X
- Case Is = 5 'ARMERD FORCES DAY
- TEMP = DateSerial(YR, 5, 1)
- For X = 1 To 7
- If Weekday(TEMP) = 7 Then 'LOOP UNTIL SATURDAY IS FOUND
- HOLIDAY = DateSerial(YR, 5, X + 14) 'JUMP TO 3RD SATURDAY
- Exit Function
- Else
- TEMP = TEMP + 1
- End If
- Next X
- Case Is = 6 'MEMORIAL DAY
- TEMP = DateSerial(YR, 5, 31)
- For X = 1 To 7
- If Weekday(TEMP) = 2 Then 'LOOP UNTIL MONDAY IS FOUND
- HOLIDAY = DateSerial(YR, 5, TEMP)
- Exit Function
- Else
- TEMP = TEMP - 1 'DECREMENT UNTIL LAST MONDAY IN MAY IS FOUND
- End If
- Next X
- Case Is = 7 'FATHERS DAY
- TEMP = DateSerial(YR, 6, 1)
- For X = 1 To 7
- If Weekday(TEMP) = 1 Then 'LOOP UNTIL SUNDAY IS FOUND
- HOLIDAY = DateSerial(YR, 6, X + 14) 'JUMP TO 3RD SUNDAY
- Exit Function
- Else
- TEMP = TEMP + 1
- End If
- Next X
- Case Is = 8 'LABOR DAY
- TEMP = DateSerial(YR, 9, 1)
- For X = 1 To 7
- If Weekday(TEMP) = 2 Then 'LOOP UNTIL MONDAY IS FOUND
- HOLIDAY = DateSerial(YR, 9, X)
- Exit Function
- Else
- TEMP = TEMP + 1
- End If
- Next X
- Case Is = 9 'COLUMBUS DAY
- TEMP = DateSerial(YR, 10, 1)
- For X = 1 To 7
- If Weekday(TEMP) = 2 Then 'LOOP UNTIL MONDAY IS FOUND
- HOLIDAY = DateSerial(YR, 10, X + 7) 'JUMP TO 2ND MONDAY
- Exit Function
- Else
- TEMP = TEMP + 1
- End If
- Next X
- Case Is = 10 'THANKSGIVING DAY
- TEMP = DateSerial(YR, 11, 1)
- For X = 1 To 7
- If Weekday(TEMP) = 5 Then 'LOOP UNTIL THURSDAY IS FOUND
- HOLIDAY = DateSerial(YR, 11, X + 21) 'JUMP TO 4TH THURSDAY
- Exit Function
- Else
- TEMP = TEMP + 1
- End If
- Next X
- End Select
- End Function
-