VBA宏执行报错:Object variable or with block variable not set
解决VBA中"Object variable or with block variable not set"错误及单元格引用问题
核心问题分析
- 对象赋值遗漏
*Set*关键字:VBA中,所有对象类型(比如Range、Worksheet)的变量赋值必须用*Set*关键字,直接用=会触发"Object variable or with block variable not set"错误——因为=仅支持普通数据类型(字符串、数字等)的赋值,无法处理对象类型。 Cells方法未指定父工作表:第二种写法里的Cells(ActiveCell.Row,8)默认指向当前活动工作表,而非你定义的targetSheet,如果活动表不是Sheet1,会导致引用无效,最终cell变量未被正确赋值,触发Is Nothing的判断分支。
修正后的代码
Dim targetSheet As Worksheet Dim cell As Range Set targetSheet = ThisWorkbook.Sheets("Sheet1") ' 方式1:直接引用H列对应行,注意加Set Set cell = targetSheet.Range("H" & ActiveCell.Row) ' 方式2:用Cells指定单元格,明确父工作表(更严谨) ' Set cell = targetSheet.Cells(ActiveCell.Row, 8) If cell Is Nothing Then MsgBox "Cell not found.", vbCritical Exit Sub End If
额外优化建议
如果担心ActiveCell.Row超出目标工作表的行范围,可以增加行号有效性判断,避免后续操作出错:
' 在赋值cell前添加 If ActiveCell.Row > targetSheet.Rows.Count Then MsgBox "指定行号超出工作表范围", vbExclamation Exit Sub End If
内容的提问来源于stack exchange,提问作者Somak
相关产品推荐
相关产品推荐

