mardi 4 août 2015

Return array to excel from VBA function

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