Ich versuche, eine Funktion zu schreiben, die ein Array als Argument akzeptiert. Das Array kann beliebig viele Elemente enthalten.
Function processArr(Arr() As Variant) As String
Dim N As Variant
dim finalStr as string
For N = LBound(Arr) To UBound(Arr)
finalStr = finalStr & Arr(N)
Next N
processArr = finalStr
End Function
So versuche ich die Funktion aufzurufen:
Sub test()
Dim fString as string
fString = processArr(Array("foo", "bar"))
End Sub
Ich erhalte die Fehlermeldung:
Kompilierungsfehler: Typenkonflikt: Array oder benutzerdefinierter Typ erwartet.
Was mache ich falsch?
Dies scheint unnötig, aber VBA ist ein seltsamer Ort. Wenn Sie eine Array-Variable deklarieren, diese mit Array()
festlegen und die Variable dann an Ihre Funktion übergeben, freut sich VBA.
Sub test()
Dim fString As String
Dim arr() As Variant
arr = Array("foo", "bar")
fString = processArr(arr)
End Sub
Auch Ihre Funktion processArr()
könnte geschrieben werden als:
Function processArr(arr() As Variant) As String
processArr = Replace(Join(arr()), " ", "")
End Function
Wenn Sie in der ganzen Kürze Sache sind.
Ihre Funktion hat für mich funktioniert, nachdem Sie die Deklaration in diese geändert haben ...
Function processArr(Arr As Variant) As String
Sie könnten auch ein ParamArray
wie dieses in Betracht ziehen ...
Function processArr(ParamArray Arr() As Variant) As String
'Dim N As Variant
Dim N As Long
Dim finalStr As String
For N = LBound(Arr) To UBound(Arr)
finalStr = finalStr & Arr(N)
Next N
processArr = finalStr
End Function
Und dann rufe die Funktion so auf ...
processArr("foo", "bar")