Передача определенных элементов массива UDT в функцию

#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
  

в функцию. Я имею в виду,

  1. первое из них недопустимо, поскольку индекс элемента массива (а не элемент элемента) не был указан.
  2. Второе также недопустимо.

Решение состоит в том, чтобы передать вашу функцию

 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. Спасибо за разъяснение, это то, что, как я думал, мне придется сделать.