You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.17 11:32:35