VBA使用With语句时跨工作表执行.Row代码报错的问题求助
VBA代码报错修复与优化
报错原因
你用With引用了"Mysheet"但没激活它,而.Select方法要求目标工作表必须是当前活动工作表,切换到其他工作表执行代码时就会触发错误。而且VBA里用Select/Selection不仅容易出这类环境依赖问题,运行效率也更低,建议直接操作单元格/行对象。
修正后的代码
下面两种写法都能实现你的需求,按需选择:
写法1:直接删除第12行到工作表最后一行(简单粗暴,适合确定第12行下方都是要删的内容)
With Sheets("Mysheet") ' 删除第12行及下方所有行 .Rows("12:" & .Rows.Count).Delete ' 清除第11行的内容 .Rows("11:11").ClearContents End With
写法2:只删除第12行到最后一个有数据的行(更精准,避免删空行)
With Sheets("Mysheet") Dim lastDataRow As Long ' 取A列最后一个有数据的行号,若数据在其他列,把1改成对应列号(比如B列是2) lastDataRow = .Cells(.Rows.Count, 1).End(xlUp).Row ' 只有当最后数据行≥12时才执行删除,避免无数据时报错 If lastDataRow >= 12 Then .Rows("12:" & lastDataRow).Delete End If ' 清除第11行内容 .Rows("11:11").ClearContents End With
关键优化点
- 去掉了
Select/Selection,直接通过With块引用的工作表操作行,不再依赖当前活动工作表,无论你在哪个工作表都能正常运行。 - 写法2增加了判断逻辑,避免当第12行及下方没有数据时执行删除操作可能引发的错误。
内容的提问来源于stack exchange,提问作者SmashVinny
相关产品推荐
相关产品推荐

