首页 文章

删除所选行时的运行时错误1004

提问于
浏览
0

我有以下代码,有效删除指定工作表中的三行(查找范围等) . 这段代码我用了至少一年没有任何问题 . 但是,我最近将此代码转移到新工作簿并设置了与以前的工作簿完全相同的工作表 .

下面突出显示的代码错误以及错误消息

运行时错误'1004'

删除范围类的方法失败

任何人都可以建议为什么会出现此错误?

Sub DeleteRowPIC()

Application.ScreenUpdating = False
Application.Calculation = xlManual
ActiveSheet.Unprotect Password:="Projects123"
ActiveSheet.Range("Total").Select
If Selection.Row = 12 Then
Else
ActiveSheet.Range("Total").Select
Selection.Offset(-2, 0).Select
ActiveCell.EntireRow.Delete

ActiveSheet.Range("Total_1").Select
Selection.Offset(-2, 0).Select
ActiveCell.EntireRow.Delete **ERROR OCCURS HERE**

ActiveSheet.Range("Total_2").Select
Selection.Offset(-2, 0).Select
ActiveCell.EntireRow.Delete

End If
Range("K2").Select
Application.Calculation = xlAutomatic
With ActiveSheet

      .Protect Password:="Projects123", UserInterfaceOnly:=True
      .EnableOutlining = True
End With

1 回答

  • 0

    正如评论中所提到的,您应始终从最后一行开始,并在删除行时前往第一行 . 我怀疑你的问题是由此引起的 . 如果没有看到你的数据,我建议你从 Total_2 回到 Total . 此外,您应该尽可能避免使用 Select . 尝试将代码修改为:

    Sub DeleteRowPIC()
    
    Dim ws As Worksheet
    
    Application.ScreenUpdating = False
    Application.Calculation = xlManual
    
    Set ws = ActiveSheet
    With ws
        .Unprotect Password:="Projects123"
        If .Range("Total").Row <> 12 Then
            .Range("Total_2").Offset(-2, 0).EntireRow.Delete
            .Range("Total_1").Offset(-2, 0).EntireRow.Delete
            .Range("Total").Offset(-2, 0).EntireRow.Delete
        End If
        Application.Calculation = xlAutomatic
        .Protect Password:="Projects123", UserInterfaceOnly:=True
        .EnableOutlining = True
    End With
    

    确保在某些时候将 Application.ScreenUpdating 设置回true .

相关问题