VBA 删除表的可见行 - 运行时错误"1004":'Delete method of Range class failed'



我正在尝试删除第 5 列中值为"N"、"X"或"V"的所有行。数据存储在名为"Table1"的表中。数据集非常大,这就是为什么我试图过滤然后批量删除而不是遍历每一行。

下面的代码抛出错误运行时错误"1004":"范围类的删除方法失败",我一生都无法弄清楚原因。谁能指出我在这里缺少的方向?我觉得我以前已经成功地使用类似的代码来执行相同的功能。

'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
这对

我有用(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

尝试引用列表对象中的范围。此外,删除EntireRow元素。我突然想起以前给我带来麻烦的事情!

wsLF.ListObjects("Table1").DataBodyRange.SpecialCells(xlCellTypeVisible).Delete

删除最后一个过滤行时,函数

SpecialCells(xlCellTypeVisible) 

变得灭绝,并且工作 Delete 方法发现自己没有其他单元格,因此它会引发异常。

如果您尝试使用该函数,也会发生同样的情况

SpecialCells(xlCellTypeVisible)

在过滤器产生任何行之后。 此函数不能解析为任何范围,因此任何方法都会引发异常。

如上所述,使用

Set rngVis = tbl.DataBodyRange.SpecialCells(xlCellTypeVisible) 

解决了这个问题,因为它使该范围持久存在,删除方法直到最后都能正常工作。

我在所有表中广泛使用EntireRow.Delete,这些表通常是SQL连接,并且一直完美运行。

但现在这是第一次有人使用嵌入式PowerQuery查询。并且上述内容无法崩溃并显示错误消息Delete method of Range class failed

此外,由于错误Can't move cells in a filtered range or table. [Shift]选项.Delete不起作用。

唯一的方法是禁用DisplayAlerts并仅使用.Delete因为删除整行是默认设置(否则您将看到一个对话框)。

我们都需要习惯这种情况,因为越来越多的用户希望使用 PowerQuery 而不是 SQL。

最新更新