Домашняя страница Undo Do New Save Карта сайта Обратная связь Поиск по форуму
МИР MS EXCEL - Гость.xls

Вход

Регистрация

Напомнить пароль

 

= Мир MS Excel/Массив в качестве свойства класса. Обращение к элементу. - Мир MS Excel

Старая форма входа
  • Страница 1 из 1
  • 1
Модератор форума: китин, _Boroda_  
Массив в качестве свойства класса. Обращение к элементу.
Roman777 Дата: Понедельник, 03.12.2018, 16:56 | Сообщение № 1
Группа: Проверенные
Ранг: Ветеран
Сообщений: 980
Репутация: 127 ±
Замечаний: 0% ±

Excel 2007, Excel 2013
Добрый всем день!
Столкнулся с небольшой проблемой.
Писал небольшой макрос, который парсит файл .frm (текстовый файл формы). Для удобства создал классы (в ВБА, наверное, 2й раз использую классы).
Собственно, проблема.
Есть класса CTR:
[vba]
Код
    Public Name As String
    Public Typ As String
    Public Attributes As Variant
    Public Props As Variant
    Public ExternData As Variant 'äëÿ ProPipe - _Points
    Public Height As Long
    Public Width As Long
    Public Left As Long
    Public Top As Long
    Public Cntrls As Variant
    Public Parent As Variant
    Public Index As Long
    Public Group As Long
[/vba]
Где свойство Attributes - это массив экземпляров класса ATRBT:
[vba]
Код
    Public Name As String
    Public Value As Variant
    Public IsExternal As Boolean ' Внутренний атрибут - false, Внешний - true (хранится в бинарнике frx)
    Public Index As Long ' ссылка на строку для быстрого поиска
[/vba]

Ну а проблема возникла в такого рода коде:
[vba]
Код
msgbox (oCTRL.Attributes(1).Index)
[/vba] -вызывает ошибку "Property let procedure not defined and property get procedure did not return an object"
По ошибке нашёл на зарубежном сайте такое решение:
[vba]
Код
msgbox (oCTRL.Attributes()(1).Index)
[/vba]
Но в итоге всё-равно не понял, почему именно так. Подскажите, пожалуйста.


Много чего не знаю!!!!

Сообщение отредактировал Roman777 - Понедельник, 03.12.2018, 16:58
 
Ответить
СообщениеДобрый всем день!
Столкнулся с небольшой проблемой.
Писал небольшой макрос, который парсит файл .frm (текстовый файл формы). Для удобства создал классы (в ВБА, наверное, 2й раз использую классы).
Собственно, проблема.
Есть класса CTR:
[vba]
Код
    Public Name As String
    Public Typ As String
    Public Attributes As Variant
    Public Props As Variant
    Public ExternData As Variant 'äëÿ ProPipe - _Points
    Public Height As Long
    Public Width As Long
    Public Left As Long
    Public Top As Long
    Public Cntrls As Variant
    Public Parent As Variant
    Public Index As Long
    Public Group As Long
[/vba]
Где свойство Attributes - это массив экземпляров класса ATRBT:
[vba]
Код
    Public Name As String
    Public Value As Variant
    Public IsExternal As Boolean ' Внутренний атрибут - false, Внешний - true (хранится в бинарнике frx)
    Public Index As Long ' ссылка на строку для быстрого поиска
[/vba]

Ну а проблема возникла в такого рода коде:
[vba]
Код
msgbox (oCTRL.Attributes(1).Index)
[/vba] -вызывает ошибку "Property let procedure not defined and property get procedure did not return an object"
По ошибке нашёл на зарубежном сайте такое решение:
[vba]
Код
msgbox (oCTRL.Attributes()(1).Index)
[/vba]
Но в итоге всё-равно не понял, почему именно так. Подскажите, пожалуйста.

Автор - Roman777
Дата добавления - 03.12.2018 в 16:56
StoTisteg Дата: Понедельник, 03.12.2018, 22:11 | Сообщение № 2
Группа: Авторы
Ранг: Старожил
Сообщений: 1161
Репутация: 103 ±
Замечаний: 0% ±

Excel 2010
Roman777, я не юзал классы... Но Вы уверены, что [vba]
Код
    Public Name As String
    Public Attributes As Variant
    Public Height As Long
    Public Width As Long
    Public Left As Long
    Public Top As Long
    Public Parent As Variant
    Public Index As Long
    Public Group As Long
[/vba]это хорошая идея? Вы переопределили зарезервированные имена как паблики и теперь удивляетесь, что они как-то странно работают...


Интуитивно понятный код - это когда интуитивно понятно, что это код.
 
Ответить
СообщениеRoman777, я не юзал классы... Но Вы уверены, что [vba]
Код
    Public Name As String
    Public Attributes As Variant
    Public Height As Long
    Public Width As Long
    Public Left As Long
    Public Top As Long
    Public Parent As Variant
    Public Index As Long
    Public Group As Long
[/vba]это хорошая идея? Вы переопределили зарезервированные имена как паблики и теперь удивляетесь, что они как-то странно работают...

Автор - StoTisteg
Дата добавления - 03.12.2018 в 22:11
anvg Дата: Понедельник, 03.12.2018, 22:41 | Сообщение № 3
Группа: Друзья
Ранг: Ветеран
Сообщений: 581
Репутация: 271 ±
Замечаний: 0% ±

2016, 365
Доброе время суток
Вы переопределили зарезервированные имена как паблики
. Чем это зарезервированы? Обыкновенный в ООП полиморфизм. Вот отсутствие файла примера с кодом как работают с тем самым Attributes это да, плохая идея.
 
Ответить
СообщениеДоброе время суток
Вы переопределили зарезервированные имена как паблики
. Чем это зарезервированы? Обыкновенный в ООП полиморфизм. Вот отсутствие файла примера с кодом как работают с тем самым Attributes это да, плохая идея.

Автор - anvg
Дата добавления - 03.12.2018 в 22:41
Roman777 Дата: Вторник, 04.12.2018, 09:44 | Сообщение № 4
Группа: Проверенные
Ранг: Ветеран
Сообщений: 980
Репутация: 127 ±
Замечаний: 0% ±

Excel 2007, Excel 2013
StoTisteg,
Вы переопределили зарезервированные имена как паблики

это же не переопределение, а определение для моего конкретного класса. (или в VBA классы по умолчанию наследники чего-то?)
anvg, Сложно довольно выделить отдельно работу с Attributes. Мне проще скинуть весь файл. В нём ничего секретного. Но "небольшой", это был сарказм ...) Посчитал, что разбираться долго нужно будет... а так мб сразу в глаза что-то бросится.
Я грешу на определение в классе Attributes As Variant, поэтому когда я создаю контрол:
К сообщению приложен файл: 7165022.xlsm (53.1 Kb) · TST_.frm (3.5 Kb)


Много чего не знаю!!!!

Сообщение отредактировал Roman777 - Вторник, 04.12.2018, 09:52
 
Ответить
СообщениеStoTisteg,
Вы переопределили зарезервированные имена как паблики

это же не переопределение, а определение для моего конкретного класса. (или в VBA классы по умолчанию наследники чего-то?)
anvg, Сложно довольно выделить отдельно работу с Attributes. Мне проще скинуть весь файл. В нём ничего секретного. Но "небольшой", это был сарказм ...) Посчитал, что разбираться долго нужно будет... а так мб сразу в глаза что-то бросится.
Я грешу на определение в классе Attributes As Variant, поэтому когда я создаю контрол:

Автор - Roman777
Дата добавления - 04.12.2018 в 09:44
Roman777 Дата: Вторник, 04.12.2018, 09:45 | Сообщение № 5
Группа: Проверенные
Ранг: Ветеран
Сообщений: 980
Репутация: 127 ±
Замечаний: 0% ±

Excel 2007, Excel 2013
где непосредственно Атрибуты создаются функцией, постепенно расширяющей этот массив:

, Attributes является Variant-ом. А его структура в VBA специфическая... всегда представляется двумерным массивом, вроде бы... (поправьте, плз).
Но способа определить в классе поле-массив, я не знаю как иначе, чем Variant.

[p.s.]почему весь текст сразу не влез? Писало, что ещё 5000+ символом осталось, но при попытке всё в 1 сообщение пихнуть, говорит что лимит превышаю...[/p.s.]
К сообщению приложен файл: TST_.frx (0.5 Kb)


Много чего не знаю!!!!

Сообщение отредактировал Roman777 - Вторник, 04.12.2018, 09:47
 
Ответить
Сообщениегде непосредственно Атрибуты создаются функцией, постепенно расширяющей этот массив:

, Attributes является Variant-ом. А его структура в VBA специфическая... всегда представляется двумерным массивом, вроде бы... (поправьте, плз).
Но способа определить в классе поле-массив, я не знаю как иначе, чем Variant.

[p.s.]почему весь текст сразу не влез? Писало, что ещё 5000+ символом осталось, но при попытке всё в 1 сообщение пихнуть, говорит что лимит превышаю...[/p.s.]

Автор - Roman777
Дата добавления - 04.12.2018 в 09:45
  • Страница 1 из 1
  • 1
Поиск:

Яндекс.Метрика Яндекс цитирования
© 2010-2024 · Дизайн: MichaelCH · Хостинг от uCoz · При использовании материалов сайта, ссылка на www.excelworld.ru обязательна!