arrays - 对象内的类对象的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
解决方案
您在代码中错过了 ap 。你必须参考你的类内部变量。
Public Property Let Books(v As Variant): pBooks = v: End Property
在这种情况下,我也更喜欢使用更多空间。这可能会使此类错误更加明显
Public Property Let Books(v As Variant)
pBooks = v
End Property
推荐阅读
- vba - 在 VBA 中连接 2 列
- linux-kernel - Buildroot 没有内核的 uImage 选项
- mongodb - 为子集合创建 mongodb 视图
- python - 如何处理 Peewee 模型和应用程序控制器之间的交叉引用?
- excel - MS VB 从一个工作表复制到另一个带有空单元格的工作表
- c# - Task.Wait() 和 ((IAsyncResult)Task).AsyncWaitHandle.WaitOne() 有什么区别
- angular - 具有多个表单组的Angular 6动态表单
- android - 库可以依赖并从另一个多风格库中读取资源吗?
- java - Apache Tomcat 无法在 Mac 上启动
- rest - 使用 groovy 脚本在 SoapUI 中比较 JDBC 响应和 REST API 响应