我遇到以下代码的问题,它试图过滤一组数据,然后删除可见的行。目前我得到一个"运行时1004错误:删除方法或范围类失败"这发生在我的代码的最后一行。我在网站上发现了一个类似的问题,答案似乎正是我在最后一行代码中所拥有的。
Dim LastRow As Long
LastRow = Worksheets("Orders").Range("A" & Rows.Count).End(xlUp).Row
Worksheets("Orders").Range("A1:CU" & LastRow).AutoFilter Field:=10, Criteria1:="New"
If Worksheets("Orders").Range("A1:CU" & LastRow).SpecialCells(xlCellTypeVisible).Count > 1 Then
Worksheets("Orders").Range("A1:CU" & LastRow).Offset(1, 0).SpecialCells _
(xlCellTypeVisible).EntireRow.Delete
稍后在我的代码中,我再次过滤同一组数据,这次删除不可见(过滤掉的)行。我也在这段代码的最后一行得到了同样的错误:
Worksheets("Orders").Range("$A1:CC" & LastRow).AutoFilter Field:=26, Criteria1:= _
"=*Jazz*", Operator:=xlAnd
Dim oRow As Range, rng As Range
Dim myRows As Range
With Sheets("Orders")
Set myRows = Intersect(.Range("A:A").EntireRow, .UsedRange)
If myRows Is Nothing Then Exit Sub
End With
For Each oRow In myRows.Columns(1).Cells
If oRow.EntireRow.Hidden Then
If rng Is Nothing Then
Set rng = oRow
Else
Set rng = Union(rng, oRow)
End If
End If
Next
If Not rng Is Nothing Then rng.EntireRow.Delete
非常感谢对这些错误的任何帮助!
答案 0 :(得分:3)
在删除之前,您不需要调用SpecialCells
,因为方法Delete
仅对可见行起作用。问题可能是由于这个问题。
此外,测试.SpecialCells(xlCellTypeVisible).Count > 1
没用,因为过滤范围的标题行仍然可见。
这是编写代码的更安全,更简单的方法:
With Worksheets("Orders").UsedRange
.AutoFilter 10, "New"
.Offset(1).EntireRow.Delete ' <--- no need for .SpecialCells
End With
答案 1 :(得分:1)
@ A.S.H的帖子是极简主义的一个很好的例证,但你的1 st 代码块仍然没问题。
只是做一个小小的修正,按照他的指示将.SpecialCells(xlCellTypeVisible).Count > 1
更改为.SpecialCells(xlCellTypeVisible).Count > 2
。另外,不要忘记在最后添加行Worksheets("Orders").ShowAllData
。
2 nd 代码块不必要地复杂化(因此可能容易出错)。相反,只需将1 st 代码块的过滤器更改为Criteria1:="<>New"
,如果您想要消除&#34; New&#34;项目
运行时错误问题似乎是由于其他原因造成的。确保纸张不受保护。
要查看是否是导致问题的代码或文件格式,您还可以在新工作簿上测试相同的代码,只复制现有数据中的数据(粘贴值)和然后运行代码。
答案 2 :(得分:0)
您应该删除代码顶部的所有过滤器。
On Error Resume Next
If Worksheets("Orders").AutoFilter.FilterMode = True Then
Worksheets("Orders").ShowAllData
End If