VBA中为With语句指定对象时出现对象未设置错误
VBA解决「Object Variable or With block variable not set」错误方案
错误核心原因
VBA中对象类型变量的赋值必须使用Set关键字,直接用=赋值是针对非对象类型(如字符串、数值)的语法。你直接写contractToUpdate = currentContract/previousContract时,对象变量contractToUpdate并没有正确引用目标实例,导致后续With语句调用时触发「对象变量或With块变量未设置」错误。
解决方案
正确声明对象变量
确保contractToUpdate被声明为ContractSelection类型的对象变量:Dim contractToUpdate As ContractSelection用Set关键字完成对象赋值
根据复选框状态,通过Set将目标实例赋值给contractToUpdate:' 假设切换复选框名为chkSwitchContract If Me.chkSwitchContract.Value = True Then Set contractToUpdate = currentContract Else Set contractToUpdate = previousContract End If正常使用With语句操作对象
赋值完成后,即可通过With语句简化代码:With contractToUpdate .ContractCode = "UPDATED_CONTRACT_001" ' 更新合同代码属性 ' 可添加更多类属性或方法的调用 End With
额外注意事项
- 确认
currentContract和previousContract已通过Set完成初始化,比如:
且已完成必要的属性赋值,避免它们本身处于Set currentContract = New ContractSelection Set previousContract = New ContractSelectionNothing状态。 - 若这两个实例是公共模块中的变量,要确保在使用前没有被意外重置为
Nothing。
内容的提问来源于stack exchange,提问作者user21174900
相关产品推荐
相关产品推荐

