【问题标题】:VBA array of class objects inside object returns out of stack space error对象内的类对象的VBA数组返回堆栈空间错误
【发布时间】:2018-09-10 07:19:24
【问题描述】:

我试图用下面的代码来说明在 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

【问题讨论】:

    标签: arrays vba class


    【解决方案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)中,我实现了良好的清晰性能,错误应该很容易以这种方式显示。
    • 我同意,正如我所说,我更喜欢使用更多的行。口味问题...
    猜你喜欢
    • 2019-10-12
    • 2011-11-25
    • 2017-11-08
    • 2011-11-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-04-23
    • 2018-01-25
    相关资源
    最近更新 更多