Den er god nok, folj, med din MyAddToArray - vil bare lige vise ændringer der opfylder flere krav
'()' i føste parameter skal smides væk - en variant kan indefolde et arrray og på den måde kan man gå fra empty til et array med første element - og:
variant er default, så 'as variant' som type angivelse er overflødig - og en variant kan også endeholde en strengværdi - dermed
Function MyAddToArray(MyArray, Addition)
...
Så er der det med at kalde med en variabel der intet indeholder endnu - sådan en variant er empty
Function MyAddToArray(MyArray, Addition)
If IsEmpty(MyArray) Then MyArray = Array()
'rest of lines
end function
Vi kan teste med:
Sub testit()
Dim arr 'VIGTIGT ikke '()' bag
arr = MyAddToArray(arr, "Kurt ")
arr = MyAddToArray(arr, "korte ")
arr = MyAddToArray(arr, "starkt")
Debug.Print Join(arr, "")
End Sub
Men! du arbejder i dine vba liner med MyArray - der er ingen grund til at returnere den og efterfølgende tildele - den har allerede værdien! - dermed er function overkilled
Sub MyAddToArray(MyArray, Addition)
Dim ArrayCount As Integer
If IsEmpty(MyArray) Then MyArray = Array()
ArrayCount = UBound(MyArray, 1)
ReDim Preserve MyArray(ArrayCount + 1) ' tilføjer en ekstra plads i MyArray
MyArray(ArrayCount + 1) = Addition ' smider værdi ind i den nu oprettede plads
End Sub
Som så skal anvendes således:
Sub testit()
Dim arr
MyAddToArray arr, #12/31/2015#
MyAddToArray arr, " Kurt "
MyAddToArray arr, "korte "
MyAddToArray arr, 150
Debug.Print Join(arr, "")
End Sub
Eller blot, sorry
Sub MyAddToArray(MyArray, Addition)
If IsEmpty(MyArray) Then MyArray = Array() ' herefter er ubound(MyArray)=-1
ReDim Preserve MyArray(UBound(MyArray) + 1)
MyArray(UBound(MyArray)) = Addition
End Sub
Vi kan putte alle simple typer i array'et, men hvad med objekter?
Denne test giver fejl
Sub test2()
Dim arr, dic As New Dictionary
dic.Add "fornavn", "Kurt"
MyAddToArray arr, dic
End Sub
Med mindre vi ændrer sidste linie - og dermed endligt får:
Sub MyAddToArray(MyArray, Addition)
If IsEmpty(MyArray) Then MyArray = Array()
ReDim Preserve MyArray(UBound(MyArray) + 1)
If IsObject(Addition) Then Set MyArray(UBound(MyArray)) = Addition Else MyArray(UBound(MyArray)) = Addition
End Sub
Sub test3()
Dim i, arr, dic As New Dictionary
dic.Add "fornavn", "Kurt"
dic.Add "efternavn", "Hansen"
For Each i In Array(Null, 1, 1, 1.1, 1.1, #12/31/2015#, "Kurt", False, dic)
MyAddToArray arr, i: Next
'
https://msdn.microsoft.com/en-us/library/office/gg278470.aspx For Each i In arr
Debug.Print TypeName(i), VarType(i): Next
Debug.Print arr(UBound(arr)).Item("fornavn") & " " & _
arr(UBound(arr)).Item("efternavn")
End Sub