VBA声明Range变量时触发Object variable or with block variable not set错误问询
问题原因及解决方案
触发原因
- VBA对值类型和对象类型的赋值规则有明确区分:值类型(字符串、数值、布尔值等)直接使用
=赋值即可,而Range属于对象类型,必须搭配Set关键字完成赋值,否则就会抛出「Object variable or with block variable not set」错误。 - 你删除变量声明行时,
range_to_sum会被默认判定为Variant变体类型:此时你给它赋值的是地址字符串,变量会自动适配为字符串类型,后续求和等内置函数可以直接识别该地址字符串,因此不会报错。
修正方法
调整代码如下,即可保留Range类型声明的同时正常运行:
Dim range_to_sum As Range ' 对象赋值需加Set关键字,同时通过Range方法将地址字符串转为Range对象 Set range_to_sum = Range("D" & paste_failures_row & ":" & "D" & lrow_4)
后续执行求和运算时直接调用即可,示例:Debug.Print Application.WorksheetFunction.Sum(range_to_sum)
内容的提问来源于stack exchange,提问作者Sam
相关产品推荐
相关产品推荐

