Страницы: 1
RSS
Есть ли переменная (по имени) в пользовательском типе данных?
 
Пара вопросов. В Excel есть ползовательские типы данных:
Код
Type car
   name as string
   year as integer
End type

Предположим есть процедура
Код
Sub test()
    Dim mycar as car
end Sub

Вопросы:
1. Можно ли пролучить список переменных в mycar в каком либо массиве?
2. Можно ли запросить наличие переменной в пользовательском типе (напр. car.hasProperty("engine"), которые возвразает true или false?
3. Можно ли обратиться к переменной в пользовательском типе через драгую переменнту: напр. Dim prop as String: prop = "name" :debug.print mycar.prop, чтобы получить mycar.name?
 
По всем пунктам: нет. Если, конечно, не изобретать велосипеды.
1. Потому что UDT(user defined type) не поддерживает итеративное обращение(т.е. цикл к ним не применить как к коллекциям)
2. Ну просто не поддерживается, как впрочем, и у многих других типов в VBA. Поименованное обращение доступно только в случае с коллекциями и их реализациями(словари, например)
3. См.п.2
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
 
Или в качестве UDT сделать вариантный массив фиксированной длины, а его уже можно перебрать.
Код
Type MyType
arr(8) As Variant
End Type
Sub test()
Dim aa As MyType
For a% = 0 To 8
  aa.arr(a) = a: Debug.Print aa.arr(a)
Next
End Sub
 
Доброе время суток.
В принципе, com-библиотеки можно ранее было просматривать утилитой от Microsoft TLBINF32.dll, правда, найти её по ссылкам на официальную скачку нет возможности. Она позволяла получать данные о классах, интерфейсах, перечислениях, думаю, и о пользовательских типах тоже. Насколько этим можно воспользоваться в VBA не скажу, ни разу не использовал.
Судя по всему vladmetnev пришёл из мира javascript, на это наводит hasProperty. Только и в мире javascript, насколько понимаю, тоже не приветствуется создание не определённости при построении приложения.
Тут можно попинать разработчиков объектной модели Excel VBA, да и Office в частности. Почему только Selection? А почему нет Worksheet.SelectionRange, Worksheet.SelectionCharts и т. д.?
А вот по 3 пункту - это как это? А можно на js пример представить?
Страницы: 1
Наверх