删除筛选的行时出现运行时错误1004(删除范围对象的方法失败)



我想用两个标准过滤我的Excel表,并删除过滤后的行。我写了以下代码:

With ThisWorkbook.Worksheets("Table1").ListObjects("coordinates").Range 
.AutoFilter Field:=3, Criteria1:=longitude_arr, Operator:=xlFilterValues
.AutoFilter Field:=4, Criteria1:=latitude_arr, Operator:=xlFilterValues
.Offset(1, 0).SpecialCells(xlCellTypeVisible).EntireRow.Delete
End With

过滤工作正常,但删除部分给我带来了运行时错误1004:删除范围对象的方法失败。我看不出有什么问题,你能帮我吗?

我认为错误是因为您试图从表中删除行,但您还有一行不是表的一部分:Offset(1, 0)将把表之后的第一行添加到要删除的行中。

请尝试以下代码-它将在删除之前删除此额外的行。此外,我添加了一个检查是否要删除任何内容,如果没有,请跳过delete命令(否则会出现运行时错误)

Dim sourceRange As Range
Set sourceRange = ThisWorkbook.Worksheets("Table1").ListObjects("coordinates").Range
With sourceRange
.AutoFilter Field:=3, Criteria1:=longitude_arr, Operator:=xlFilterValues
.AutoFilter Field:=4, Criteria1:=latitude_arr, Operator:=xlFilterValues        Dim filterRange As Range
Set filterRange = .Offset(1, 0).SpecialCells(xlCellTypeVisible).EntireRow
Dim deleteRange as Range
Set deleteRange = Intersect(filterRange, sourceRange)
if not deleteRange is Nothing then deleteRange.Delete
End With

更新很明显,我在复制测试代码时犯了一个错误,因为我保留了Autofilter命令,用quesion中的命令替换了它。

四处玩耍揭示了一些细节:
oDelete也会因为EntireRow而失败
o我不知道ListObject有一个DataBodyRange-对象,这让它变得容易多了
o我还忘记了.SpecialCells(xlCellTypeVisible)抛出一个运行时错误,而不是返回Nothing,所以您需要用On Error将其括起来
o如果您想删除整行,则使用Application.DisplayAlerts = False

我现在用

With ThisWorkbook.Worksheets(1).ListObjects(1).DataBodyRange
.AutoFilter Field:=3, Criteria1:=longitude_arr, Operator:=xlFilterValues
.AutoFilter Field:=4, Criteria1:=latitude_arr, Operator:=xlFilterValues
Dim filterRange As Range
On Error Resume Next
Set filterRange = .SpecialCells(xlCellTypeVisible)
On Error GoTo 0
Application.DisplayAlerts = False
If Not filterRange Is Nothing Then filterRange.Delete
Application.DisplayAlerts = True
End With

相关内容

  • 没有找到相关文章

最新更新