我有以下代码可以有效删除指定工作表中的三行(查找范围等)。这段代码我用了至少一年没有任何问题。但是,我最近将此代码转移到新工作簿并设置了与上一个工作簿完全相同的工作表。
下面突出显示的代码错误,错误消息为
运行时错误'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
答案 0 :(得分: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。
答案 1 :(得分:0)
我知道已经很长时间了,但是如果其他人偶然发现我遇到的这种问题,当我遇到这个问题时,原来是与该行重叠的外部数据查询是问题所在。即使删除该查询的结果也无法解决该问题。但是,当我将该查询移到另一个工作表时,问题就解决了。