VBA -UDF по-разному обрабатывает массивы

Этот код является небольшим подмножеством того, над чем я работаю. Я сузил проблему до следующего фрагмента. У меня есть эта UDF SampleFunction, которой мне нужно передать массив {3;4} в качестве единственного аргумента.

Function SampleFunction(InputVar As Variant) As Integer
    SampleFunction = InputVar(LBound(InputVar))
End Function

Я называю эту UDF двумя разными способами. Во-первых, через VBA

Случай 1:

Sub testSF()
    MsgBox SampleFunction(Array(3, 4))
End Sub

И, во-вторых, через мой лист Excel как

Случай 2:

={SampleFunction(ROW(3:4))}-> т.е. как функцию массива.

Проблема:

UDF работает для Случая 1, т.е. вызов через VBA, он выдает ошибку #VALUEдля Случая 2, когда я вызываю его через рабочий лист Excel.

Я прошел через функцию, используя F8 для Случая 2. Lbound(InputVar)оценивается как 1 (, что отличается от вызова из подпрограммы в Случае 1, здесь он оценивается как 0 ), но InputVar(Lbound(InputVar))показывает Ошибка «Нижний индекс вне диапазона» в случае 2.

Все, что я хочу знать, это как вызвать функцию SampleFunction из рабочего листа , т.е. случай 2, чтобы он имел то же поведение, что и случай 1, показанный выше.. В качестве бонуса было бы неплохо, если бы кто-нибудь объяснил, почему Lbound(InputVar)оценивается по-разному в приведенных выше случаях.

Некоторые другие детали:

Я создаю UDF для выполнения некоторых манипуляций с регулярными выражениями. Аргумент InputVarвыше,будет массивом {x;y;z;...}, указывающим xth, yth, zth... вхождения. Тип данных InputVarсохранен как Variant, потому что я хочу иметь возможность передавать числа (в виде массива одной длины ), массивы или диапазоны (, взятые и преобразованные в массив )для функция.

Заранее спасибо!!

5
задан Community 9 July 2018 в 18:41
поделиться