当删除一个选定的行时运行时错误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
正如在评论中提到的,您应该始终从最后一行开始,在删除行时工作到第一行。我怀疑你的问题是由此造成的。没有看到你的数据,我建议从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。
*确保将Application.ScreenUpdating设置为true * - 这实际上不是必需的,它会自动翻转回复后模块运行 –
好点@ScottHoltzman – TheEngineer
谢谢,这比我现在的代码更好,并已解决了这个问题。:) –
你有没有在新的工作表中命名范围“Total_1”? – Clusks
@Sean Bailey是否将您的“Total_1”命名范围从第1行或第2行开始? –
你真的不应该使用'.Select',它非常慢并且容易产生错误。 –