#vba #excel
#vba #excel
Вопрос:
Итак, у меня есть UDT, настроенный следующим образом:
Public Type UserInfo
name as string
username as string
active_time as double
End Type
Затем я создаю массив такого типа:
Dim list_of_users() as UserInfo
'Populate array here
Что я хочу сделать, так это передать значения active_time в виде массива в отдельную функцию. Что-то вроде:
'StdDev function defined elsewhere
standard_dev_all = StdDev(list_of_users().active_time)
Возможно ли это вообще? Полагаю, я мог бы модифицировать функцию для работы с моим UDT, но у меня гораздо больше значений, чем просто active_time, и казалось, что это сделало бы это довольно запутанным.
Комментарии:
1. Я бы передал
by ref
массив отверстий list_of_users()2. Отлично, что у вас это сработало. Если это то, что вы искали, я был бы признателен за повышение. Спасибо 🙂
Ответ №1:
Вы не можете передать это как
UDTvariable.Element
' or
UDTvariable().Element
в функцию. Я имею в виду,
- первое из них недопустимо, поскольку индекс элемента массива (а не элемент элемента) не был указан.
- Второе также недопустимо.
Решение состоит в том, чтобы передать вашу функцию
Answer = Stdev(UDTVariable)
и внутри функции вы делаете это
Function Stdev(ByRef UDTVariableTypeName UDTVariable)
for i = 1 to N
Something = UDTVariable(i).Element
' so on and so forth
next i
Stdev = SomeAnswer
End Function
Вы можете опустить запись ByRef
, поскольку это способ передачи аргументов по умолчанию, но я сохранил его для большей ясности.
Комментарии:
1. Спасибо за разъяснение, это то, что, как я думал, мне придется сделать.