Этот код является небольшим подмножеством того, над чем я работаю. Я сузил проблему до следующего фрагмента. У меня есть эта UDF SampleFunction, которой мне нужно передать массив {3;4} в качестве единственного аргумента.
Function SampleFunction(InputVar As Variant) As Integer
SampleFunction = InputVar(LBound(InputVar))
End Function
Я называю эту UDF двумя разными способами. Во-первых, через VBA
Sub testSF()
MsgBox SampleFunction(Array(3, 4))
End Sub
И, во-вторых, через мой лист Excel как
={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, потому что я хочу иметь возможность передавать числа (в виде массива одной длины ), массивы или диапазоны (, взятые и преобразованные в массив )для функция.
Заранее спасибо!!