Как передать массив функции в 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

Вот как я пытаюсь вызвать функцию:

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

Я получаю сообщение об ошибке:

Ошибка компиляции: тип несоответствия: ожидается массив или определенный пользователем тип.

Что я делаю неправильно?

Ответ 1

Это кажется ненужным, но VBA - странное место. Если вы объявите переменную массива, затем установите ее с помощью Array(), затем передайте переменную в вашу функцию, VBA будет счастлив.

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

Также ваша функция processArr() может быть записана как:

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

Если вы находитесь во всей краткости.

Ответ 2

Ваша функция работала для меня после изменения ее объявления на это...

Function processArr(Arr As Variant) As String

Вы также можете рассмотреть ParamArray, как это...

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

А затем вызовите функцию, подобную этой...

processArr("foo", "bar")