0

我有下表:

在此处输入图像描述

以下代码(过滤此表):

Sub testFilter()
    Dim tbl As ListObject
    Dim filteredRange As Range

    Set tbl = Sheet1.ListObjects("testTbl")
    tbl.Range.AutoFilter Field:=2, Criteria1:=Array("a", "b")

    On Error Resume Next
        Set filteredRange = tbl.ListColumns("status").DataBodyRange.SpecialCells(xlVisible)
    On Error GoTo 0

    If filteredRange Is Nothing Then
        'do something
    Else
        Debug.Print filteredRange.Address
    End If
End Sub

我希望filteredRange 什么都不是。但这不是什么,它打印的地址是: $1:$1,$3:$1048576 这基本上是我在表格中的一行旁边的整个工作表。

我究竟做错了什么?我需要能够检测到过滤器没有给出任何结果。

4

1 回答 1

0

我可以重现这种行为,但前提是表只有一行数据。一旦添加了第二行,它就会按预期运行。我找不到对此的解释,可能是 Excel 的怪癖之一。

如果表格只有一行的数据真的会发生,您可以使用解决方法

If filteredRange Is Nothing Or (tbl.Range.Rows.Count = 2 And tbl.Range.Rows(2).Hidden) Then

一句话:Operator:=xlFilterValues如果您传递一组值,我认为您的过滤器语句需要一个参数:

tbl.Range.AutoFilter Field:=2, Criteria1:=Array("a", "b"), Operator:=xlFilterValues
于 2020-05-05T08:03:21.453 回答