it-swarm.com.de

Wie übergebe ich ein Array an eine Funktion in VBA?

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?

25
user2395238

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.

26
JNevill

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")
20
HansUp