Excel 2019 VBA删除指定行时触发运行时错误'1004'求助
Excel 2019 VBA 错误排查与代码修正
错误原因分析
- 循环遍历方向错误:从第1行到最后一行正向遍历,删除行后下方行自动上移,会导致后续行被跳过,无法完整检查所有数据。
- 变量逻辑与冗余问题:
cellAddress变量在循环内声明且未实际使用,属于冗余代码;blankRow的触发逻辑时序错误,会导致未完成完整判断就进入删除分支。 - 行索引与删除范围冲突:正向循环中删除行后重置
i的操作会导致索引混乱,结合未及时同步的lastRow,容易触发无效单元格访问,引发1004错误。
修正后的代码
Sub DeleteTargetRows() Dim ws As Worksheet Dim lastRow As Long Dim i As Long ' 指向"Test"工作表 Set ws = ThisWorkbook.Sheets("Test") ' 获取A列最后一行行号 lastRow = ws.Cells(ws.Rows.Count, "A").End(xlUp).Row ' 从下往上遍历,避免删除行后跳过未检查的行 For i = lastRow To 1 Step -1 ' 检查当前行A列是否包含"Complete name" If InStr(1, ws.Cells(i, 1).Value, "Complete name", vbTextCompare) > 0 Then ' 验证两个空白行条件,且行号在有效范围内 If i + 2 <= lastRow And ws.Cells(i + 2, 1).Value = "" Then If i - 4 >= 1 And ws.Cells(i - 4, 1).Value = "" Then ' 删除两空白行之间的目标数据组及关联行(可根据实际结构调整行范围) ws.Rows(i - 3 & ":" & i + 1).EntireRow.Delete ' 更新最后一行行号(删除了5行,对应调整数值) lastRow = lastRow - 5 End If End If End If Next i End Sub
代码说明
- 反向遍历:从最后一行到第1行遍历,确保删除行后不会跳过未检查的目标数据。
- 逻辑整合:将两个空白行的检查嵌套在同一分支内,避免误触发删除操作。
- 行范围调整:根据需求设定删除范围为
i-3到i+1,对应你描述的上下空白行之间的目标数据组,若实际数据结构有差异,可自行修改行号区间。 - 冗余清理:删除未使用的
cellAddress和blankRow变量,简化代码逻辑。
内容的提问来源于stack exchange,提问作者user2303407
相关产品推荐
相关产品推荐

