Written in Excel 2003
UserForm Code:
Option Explicit
Private Function ExpiryDate(CardType As String, DateIssued As String) As String
'Use appropriate UserForm Controls as input parameters
'All UserForm Controls' Values are Strings
Dim IssueDate As Date
Dim WSFunc As WorksheetFunction
Dim DaysValid As Long
Dim tmp As Date
IssueDate = CDate(DateIssued)
'Offset since VLookUp looks in first column of table
DaysValid = WSFunc.VLookup(CardType, ThisWorkbook.Range(TBL_Card_Type).Offset(0, 1), 2, False)
tmp = DateAdd("d", DaysValid, IssueDate)
Do While IsHoliday(tmp)
tmp = DateAdd("d", 1, tmp)
Loop
Do While IsWeekend(tmp)
tmp = DateAdd("d", 1, tmp)
Loop
ExpiryDate = Format(tmp, "dd/mm/yyyy")
End Function
Standard Module Code.
Option Explicit
Public Function IsWeekend(DateToCheck As Date) As Boolean
'Convert DateStrings to Dates before Calling
'For 4day workweeks, change > 5 to > 4
'Set First Day of Week to first workday of regular work weeks
IsWeekend = Weekday(DateToCheck, vbMonday) > 5
End Function
Public Function IsHoliday(DateToCheck As Date) As Boolean
'Convert DateStrings to Dates before Calling
'You need to write this custom Function to check for local holidays
IsHoliday = False 'For Demo purposes
End Function