My goal is to return a list of dates to excel based on some rules which I will post for code completeness but are not necessarily relevant to the question. Focus mostly on the FindDates function. I am trying to return an array of dates but I only get the first one. How can I get the entire array?
Function IsInArray(ByVal MyDate As Date, ByRef Holiday_Calendar As Range) As Boolean
Dim length As Integer
length = WorksheetFunction.Count(Holiday_Calendar)
Dim counter As Integer
For counter = 0 To length
If Holiday_Calendar(counter) = MyDate Then
IsInArray = True
Exit Function
End If
Next counter
IsInArray = False
End Function
Function MyPattern(ByVal MyDate As Date, ByRef Holiday_Calendar As Range) As Date
If Weekday(MyDate) = 1 Or Weekday(MyDate) = 7 Or IsInArray(MyDate, Holiday_Calendar) Then
MyPattern = MyPattern(DateAdd("d", -1, MyDate), Holiday_Calendar)
Else
MyPattern = MyDate
End If
End Function
Function FindDates(ByVal StartDate As Date, ByVal EndDate As Date, ByRef Holiday_Calendar As Range) As Variant
Dim result_dates(9999) As Date
Dim counter As Integer
counter = 0
Dim MyDate As Date
MyDate = StartDate
If Weekday(MyDate) = 7 Then
MyDate = DateAdd("d", 2, MyDate)
End If
If Weekday(MyDate) = 1 Then
MyDate = DateAdd("d", 1, MyDate)
End If
While MyDate <= EndDate
If Weekday(MyDate) = 6 Then
result_dates(counter) = MyPattern(MyDate, Holiday_Calendar)
counter = counter + 1
End If
If MyDate = DateAdd("m", DateSerial(Year(MyDate), Month(MyDate), 1) - 1, MyDate) And Weekday(MyDate) <> 6 And Weekday(MyDate) <> 7 And Weekday(MyDate) <> 1 And (Weekday(MyDate) <> 2 Or Not IsInArray(MyDate, Holiday_Calendar)) Then
result_dates(counter) = MyPattern(MyDate, Holiday_Calendar)
counter = counter + 1
End If
MyDate = DateAdd("d", 1, MyDate)
Wend
FindDates = result_dates()
End Function
via Chebli Mohamed
Aucun commentaire:
Enregistrer un commentaire