2014-10-21 28 views
10

Próbuję napisać funkcję, która akceptuje tablicę jako argument. Tablica może mieć dowolną liczbę elementów.Jak przekazać tablicę do funkcji w VBA?

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 

Oto jak próbuję wywołać funkcję:

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

dostaję błąd mówiąc:

Compile Error: Type mismatch: array or user defined type expected.

Co robię źle?

Odpowiedz

15

To wydaje się niepotrzebne, ale VBA to dziwne miejsce. Jeśli zadeklarujesz zmienną tablicową, ustaw ją przy użyciu Array(), a następnie przekaż zmienną do swojej funkcji, VBA będzie szczęśliwa.

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

także czynność processArr() można zapisać jako:

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

Jeśli jesteś w całej zwięzłości rzeczy.

11

Twoja funkcja pracował dla mnie po zmianie jego oświadczenia w tej ...

Function processArr(Arr As Variant) As String 

Można również rozważyć ParamArray takiego ...

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 

a następnie wywołać funkcję tak ...

processArr("foo", "bar") 
Powiązane problemy