You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.24 00:25:02