web-dev-qa-db-fra.com

Comment passer un tableau à une fonction dans VBA?

J'essaie d'écrire une fonction qui accepte un tableau comme argument. Le tableau peut avoir n'importe quel nombre d'éléments.

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

Voici comment j'essaie d'appeler la fonction:

Sub test()
    Dim fString as string
    fString = processArr(Array("foo", "bar"))
End Sub

Je reçois une erreur en disant:

Erreur de compilation: incompatibilité de type: type de tableau ou défini par l'utilisateur attendu.

Qu'est-ce que je fais mal?

25
user2395238

Cela semble inutile, mais VBA est un endroit étrange. Si vous déclarez une variable de tableau, définissez-la à l'aide de Array(), puis transmettez-la à votre fonction. VBA sera heureux.

Sub test()
    Dim fString As String
    Dim arr() As Variant
    arr = Array("foo", "bar")
    fString = processArr(arr)
End Sub

De plus, votre fonction processArr() pourrait être écrite ainsi:

Function processArr(arr() As Variant) As String
    processArr = Replace(Join(arr()), " ", "")
End Function

Si vous aimez la brièveté.

26
JNevill

Votre fonction a fonctionné pour moi après avoir changé sa déclaration en ceci ...

Function processArr(Arr As Variant) As String

Vous pouvez également envisager un ParamArray comme celui-ci ...

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

Et puis appelez la fonction comme ça ...

processArr("foo", "bar")
20
HansUp