|
|
|
как сделать у своего класса открытие свойство-массив
|
|||
|---|---|---|---|
|
#18+
Добрый день. Прошу помощи. Есть класс, у него есть свойство - массив определенного пользователем типа. Требуется сделать так, чтобы к этому свойству-массиву был доступ для всего проекта. Объявить свойство-массив класса сразу как Public, не дает Excel. Пробую сделать через Get/Let/Set Код класса Library: 'свойство класса в виде массива пользовательского типа Private inner_Book() As Record 'попытка получить значения Public Property Get Book() As Record (as Record выдает "Application-defined or object-defined error") (as Object выдает "Only user defined types defined in public object modules...") Book() = inner_Book() End Property --------------------------------------- Код модуля: 'пользовательский тип данных Public Type Record number As Long End Type 'создание объекта Dim myLibrary As Library Set myLibrary = New Library вот здесь мне нужно иметь возможность работать с элементами массива вот в таком виде test = myLibrary.Book(1).number как сделать чтобы это было возможно? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.11.2009, 11:09 |
|
||
|
как сделать у своего класса открытие свойство-массив
|
|||
|---|---|---|---|
|
#18+
не разбраюсь в ООП, но может Вам создавать свой класс в Модуле Классов Excel... Insert-Class Module ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.11.2009, 11:28 |
|
||
|
как сделать у своего класса открытие свойство-массив
|
|||
|---|---|---|---|
|
#18+
ну класс там и создан) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.11.2009, 11:32 |
|
||
|
как сделать у своего класса открытие свойство-массив
|
|||
|---|---|---|---|
|
#18+
testing22, есть противоречие между декларированным желанием вернуть массив и примером обращения к как бы нему, а на самом деле к одному его элементу, причём не соответсвующим прототипу Property Get Book. Кстати, зачем создавать в памяти временный массив, и обращаться только к одному элементу? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.11.2009, 11:36 |
|
||
|
как сделать у своего класса открытие свойство-массив
|
|||
|---|---|---|---|
|
#18+
Тогда не знаю :)... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.11.2009, 11:46 |
|
||
|
как сделать у своего класса открытие свойство-массив
|
|||
|---|---|---|---|
|
#18+
Бенедикт, да Вы правы, спасибо, я не разобрался в этом моменте. Правильнее сказать, что мне нужна возможность обратиться не к самому массиву, к любому элементу массива. Но при попытке сделать такой Get пишет "Private enum and user-defined types cannot be used as parameters or return types for public procedures, public data members, or fields of..." ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.11.2009, 12:08 |
|
||
|
как сделать у своего класса открытие свойство-массив
|
|||
|---|---|---|---|
|
#18+
обращатсья я буду в цикле ко всем элементам, это тут просто для примера я написал обращение к одному элементу ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.11.2009, 12:09 |
|
||
|
как сделать у своего класса открытие свойство-массив
|
|||
|---|---|---|---|
|
#18+
testing22, а, все, вижу ошибку, теперь сделал тип Public, сейчас попробую ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.11.2009, 12:26 |
|
||
|
как сделать у своего класса открытие свойство-массив
|
|||
|---|---|---|---|
|
#18+
testing22, рассмотрим такой код: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. Код: plaintext 1. 2. Резюме: превращайте Record в класс, класс Library превращайте в коллекцию Record-ов (или создавайте класс-коллекцию Record-ов, и делайте у Library Property Get, возвращающее ссылку на экземпляр такого класса). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.11.2009, 12:27 |
|
||
|
как сделать у своего класса открытие свойство-массив
|
|||
|---|---|---|---|
|
#18+
Бенедикт, Большое спасибо за подробный ответ и совет!!! Возник вопрос: а почему мы не можем сделать у класса свойство Let? Чтобы изменять массив. В таком виде у меня не работает, но, возможно, я просто допустил ошибку в коде. Пишет "Definitions of property procedures for the same property are inconsistent, or property procedure has an optional parameter, a ParamArray, or an invalid Set final parameter" Или тут сам принцип не будет работать? Можно ли передать в Property Let индекс элемента массива? Public Property Let Book (ByVal NewValue As Long, ByVal Index As Long) inner_Book (Index) = NewValue End Property ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.11.2009, 13:16 |
|
||
|
как сделать у своего класса открытие свойство-массив
|
|||
|---|---|---|---|
|
#18+
"В таком виде не работает" - это имею в виду код, который я написал в последнем сообщении. Код из Ващего сообщения у меня работает отлично. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.11.2009, 13:18 |
|
||
|
как сделать у своего класса открытие свойство-массив
|
|||
|---|---|---|---|
|
#18+
testing22, Да, можно сделать Property Let и передать в него индекс элемента массива. Описания Property Get и Let должны соответствовать друг другу: в Property Let передаются те же параметры, что и в Property Get, плюс, последним, параметр с типом возвращаемого из Property Get результата: Код: plaintext 1. 2. 3. 4. 5. 6. Код: plaintext 1. 2. 3. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.11.2009, 14:40 |
|
||
|
|

start [/forum/topic.php?fid=61&msg=36294224&tid=2178881]: |
0ms |
get settings: |
7ms |
get forum list: |
10ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
159ms |
get topic data: |
9ms |
get forum data: |
4ms |
get page messages: |
42ms |
get tp. blocked users: |
1ms |
| others: | 228ms |
| total: | 464ms |

| 0 / 0 |
