首页 > 解决方案 > 对象内的类对象的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

标签: arraysvbaclass

解决方案


您在代码中错过了 ap 。你必须参考你的类内部变量。

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

在这种情况下,我也更喜欢使用更多空间。这可能会使此类错误更加明显

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

推荐阅读