当删除一个选定的行时运行时错误1004

问题描述:

我有下面的代码,它有效地删除指定的工作表(查找范围等)内的三行。这个代码我用了至少一年没有任何问题。不过,我最近将这些代码转移到了新的工作簿中,并建立了一个与以前的工作簿完全相同的工作表。当删除一个选定的行时运行时错误1004

哪里出现错误消息

运行时错误“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

你有没有在新的工作表中命名范围“Total_1”? – Clusks

+0

@Sean Bailey是否将您的“Total_1”命名范围从第1行或第2行开始? –

+0

你真的不应该使用'.Select',它非常慢并且容易产生错误。 –

正如在评论中提到的,您应该始终从最后一行开始,在删除行时工作到第一行。我怀疑你的问题是由此造成的。没有看到你的数据,我建议从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。

+1

*确保将Application.ScreenUpdating设置为true * - 这实际上不是必需的,它会自动翻转回复后模块运行 –

+0

好点@ScottHoltzman – TheEngineer

+0

谢谢,这比我现在的代码更好,并已解决了这个问题。:) –