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