Массив vba объектов класса внутри объекта возвращается из-за ошибки пространства стека

Я пытаюсь проиллюстрировать концепцию использования массива внутри Class Bookstore для хранения многих книжных объектов с помощью следующего кода. Я не хочу использовать коллекцию для этой задачи, потому что позже мне действительно нравится иметь доступ к Book (i) и выполнять код в зависимости от позиции i в размере массива. Небольшое исследование stackoverflow показывает, что я должен использовать оператор ReDim, но не показывает, где и как именно.

Книжный магазин класса:

Private pBooks As Variant ' it will hold an array of object book
Public Property Get Books() As Variant:  Books = pBooks:  End Property
Public Property Let Books(v As Variant): Books = v:       End Property

Учебник:

Private pName As String
Public Property Get Name() As String:     Name = pName:   End Property
Public Property Let Name(s As String):   pName = s:       End Property

Код тестирования:

Sub TestBookstore()

Dim bookArray(1 To 2) As Book, i As Long
For i = 1 To 2
 Set bookArray(i) = New Book
 bookArray(i).Name = "book called " & i
Next i

 Dim BKStore As Bookstore: Set BKStore = New Bookstore
   BKStore.Books = bookArray       ' ERROR HERE: out of stack space

 For i = LBound(BKStore.Books) To UBound(BKStore.Books)
   Debug.Print BKStore.Books(i).Name
 Next

End Sub
0
0
40
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вы пропустили букву p в своем коде. Вы должны ссылаться на внутреннюю переменную вашего класса.

Public Property Let Books(v As Variant): pBooks = v:       End Property

Я также предпочитаю использовать в таком случае больше места. Это может сделать такие ошибки более очевидными

Public Property Let Books(v As Variant)
    pBooks = v
End Property

Спасибо Storax. Что до меня, то я предпочитаю как-то перечислять похожие вещи друг под другом. Теперь VBA не позволяет форматировать интервалы по моему желанию, но в MQL (например, C) я добился хорошей четкости, и ошибки должны легко обнаруживаться таким образом.

Ziad El Hachem 10.09.2018 09:54

Со мной, как я уже сказал, я предпочитаю использовать больше строк. Дело вкуса ...

Storax 10.09.2018 10:00

Другие вопросы по теме