VBA删除表的可见行-运行时错误'1004':'范围类的删除方法失败'

时间:2019-01-30 22:13:53

标签: excel vba

我正在尝试删除第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

3 个答案:

答案 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) 

解决了问题,因为它使该范围持久化,并且删除方法直到最后都可以正常工作。