我正在尝试删除第5列中值为“ N”,“ X”或“ V”的所有行。数据存储在名为“ Table1”的表中。数据集非常大,这就是为什么我尝试过滤然后批量删除而不是遍历每一行的原因。
下面的代码引发错误运行时错误'1004':'Range类的删除方法失败',我终生无法弄清原因。谁能指出我在这里缺少的方向?我觉得以前我已经成功地使用了类似的代码来完成相同的功能。
'Remove N/X/V records
wsLF.ListObjects("Table1").Range.AutoFilter Field:=5, Criteria1:= _
Array("N", "V", "X"), Operator:=xlFilterValues
LastRow = wsLF.Range("D" & wsLF.Rows.Count).End(xlUp).Row
wsLF.Range("$A$1:$W$" & LastRow).Offset(1, 0).SpecialCells(xlCellTypeVisible).EntireRow.Delete '~~~~~Error on this line
wsLF.ListObjects("Table1").Range.AutoFilter Field:=5
答案 0 :(得分:3)
尝试从列表对象引用的范围内。此外,删除的EntireRow
的元素。我突然想起那个害我面前的问题!
wsLF.ListObjects("Table1").DataBodyRange.SpecialCells(xlCellTypeVisible).Delete
答案 1 :(得分:2)
这对我有用(Max Russell也有相同的EntireRow
评论)
Dim rngVis As Range, tbl As ListObject
Set tbl = wsLF.ListObjects(1)
tbl.Range.AutoFilter Field:=5, Criteria1:=Array("N", "V", "X"), _
Operator:=xlFilterValues
On Error Resume Next
Set rngVis = tbl.DataBodyRange.SpecialCells(xlCellTypeVisible)
On Error GoTo 0
Application.DisplayAlerts = False
If Not rngVis Is Nothing Then rngVis.Delete 'no EntireRow
Application.DisplayAlerts = True
tbl.Range.AutoFilter Field:=5
答案 2 :(得分:0)
当最后过滤的行被删除时,函数
SpecialCells(xlCellTypeVisible)
消失,工作的 Delete 方法发现自己没有额外的单元格,所以它抛出异常。
如果您尝试使用该功能,也会发生同样的情况
SpecialCells(xlCellTypeVisible)
过滤后没有线条。此函数无法解析为任何范围,因此任何方法都会抛出异常。
正如上面提到的使用
Set rngVis = tbl.DataBodyRange.SpecialCells(xlCellTypeVisible)
解决了问题,因为它使该范围持久化,并且删除方法直到最后都可以正常工作。