VBA对象数组属性赋值报错:Object variable or With block variable not set
问题解决方案
1. 解决"Object variable or With block variable not set"错误
你初始化park对象数组时,只是创建了数组容器,但数组内的每个元素并未实例化为park对象,仍处于Nothing状态,直接访问属性必然报错。在append方法中,需先为数组当前位置实例化新的park对象,再进行属性赋值:
' park_array类的append方法示例 Public Sub Append(cardNo As String, entryTime As Date, exitTime As Date) ' 扩展数组长度(假设你的resize逻辑已实现) size = size + 1 ReDim Preserve elements(1 To size) As park ' 关键步骤:实例化新的park对象 Set elements(size) = New park ' 正常赋值属性 elements(size).card_no = cardNo elements(size).entry_time = entryTime elements(size).exit_time = exitTime End Sub
2. 解决"所有元素与最后一个元素相同"的问题
之前的错误是因为反复复用同一个park对象实例,数组存储的是对象引用,所有元素指向同一内存地址,最后修改的内容会覆盖所有引用的内容。解决核心是每次添加时创建全新的park对象,而非传递同一对象的引用:
如果需要通过传入park对象添加,不要直接赋值引用,而是创建新对象并复制属性:
Public Sub AppendByObj(newPark As park) size = size + 1 ReDim Preserve elements(1 To size) As park ' 创建新对象,复制传入对象的属性 Set elements(size) = New park elements(size).card_no = newPark.card_no elements(size).entry_time = newPark.entry_time elements(size).exit_time = newPark.exit_time End Sub
或者在调用方每次添加时就创建新对象:
' 调用示例 Dim myParkArray As New park_array Dim tempPark As park Set tempPark = New park tempPark.card_no = "001" tempPark.entry_time = Now() myParkArray.AppendByObj tempPark Set tempPark = New park ' 必须重新实例化新对象 tempPark.card_no = "002" tempPark.entry_time = Now() myParkArray.AppendByObj tempPark
内容的提问来源于stack exchange,提问作者Clayt
相关产品推荐
相关产品推荐

