Я пытаюсь передать массив в UDF, чтобы избежать массивного дублирования кода. В качестве простого примера:Передача массивов или диапазонов в VBA udf
function USERFUNC1(inp as variant)
Dim array_size As Integer
dim i as integer
dim values as double
array_size = WorksheetFunction.CountA(inp)
for i = 1 to array_size
values = values + inp(i)
Next i
USERFUNC1 = values
End function
function USERFUNC2(input1 as variant, input2 as variant)
Dim array_size As Integer
dim i as integer
dim values as double
array_size = WorksheetFunction.CountA(input1)
redim nested_array(array_size)
for i = 1 to array_size
nested_array(i) = input1(i)+input2(i)
Next i
USERFUNC2= USERFUNC1(nested_array)
End function
В примере я создать у меня есть вложенная массив, который я передаю внутренне ОДС. Однако при запуске это приводит к ошибке по ошибке. Я уверен, что это может быть сделано, но я, кажется, что-то отсутствует
РЕДАКТИРОВАНИЕ
Кажется, что я написал вызвал замешательство, по существу, у меня есть ряд функций, выше, чтобы продемонстрировать идею ,
В некоторых ячейках я вычисляю значение с помощью функции (называю ее fugacity), которая берет значения в массив из диапазона. В другой функции (фазовое равновесие) мне нужно выполнить один и тот же расчет (fugacity) во второй функции (фазовое равновесие), используя значения, вычисленные во второй функции. Это требует от меня передать массив из второй функции в первую или записать всю первую функцию снова во второй.
Я мог бы это сделать, однако сделать вторую функцию сложнее отлаживать, поскольку я больше не могу быть уверенным, что вложенный расчет выполняет правильный расчет, а мне нужно проверить все это. Пока у меня около 250 строк кода в первой и 300 строк второй и во втором (фазовое равновесие) мне нужно выполнить первый (fugacity) 4 раза.
Массивы с нуля по умолчанию, так что вы получите сообщение об ошибке, когда я> ARRAY_SIZE-1. Кроме того, используйте UBound (inp), чтобы получить размер. –
Вы хотите передать массив или диапазон? Мое понимание вашего вопроса состоит в том, что вы хотите передать массив ... –
Вы получите всевозможные ошибки с тем, что вы написали. И как обрабатывать аргументы функций будут отличаться, зависит от того, передаете ли вы массив или диапазон, а также количество значений. Я не могу воспроизвести вашу проблему с предоставленной вами информацией. Пожалуйста, прочитайте разделы справки о том, как задать хороший вопрос, а также о создании минимального, но полного и проверяемого примера. –