vba如何检查过滤器是否给出结果(可见属性包括标题)

问题描述 投票:0回答:1

我正在运行以下代码以进行过滤,然后检查过滤器是否产生了结果:

Sub filter()
    Dim field1Col As Integer
    Dim tbl As ListObject
    Dim typeRange As Range

    Set tbl = Worksheets("Sheet1").ListObjects("Table1")

    field1Col = Worksheets("Sheet1").Rows("1:1").Find(What:="Col1", LookAt:=xlWhole).Column
    tbl.Range.AutoFilter Field:=field1Col, Criteria1:="c"

    On Error Resume Next
        Set typeRange = tbl.ListColumns("col1").Range.SpecialCells(xlVisible)
    On Error GoTo 0
    If typeRange Is Nothing Then
        Debug.Print "no filtered values"
    Else
        Debug.Print typeRange.Value
    End If
End Sub

我的标准是“ C”。当没有“ C”值时,可见范围仍然不是“ Nothing”,因为它包含标题。上面的代码将打印该列的标题。

我将检查过滤后是否没有结果?

excel vba autofilter
1个回答
0
投票
替换此行:

Set typeRange = tbl.ListColumns("col1").Range.SpecialCells(xlVisible)

带有此行:

Set typeRange = tbl.ListColumns("col1").DataBodyRange.SpecialCells(xlVisible)

假设过滤范围定义为:

Set rDATA = Sheet1.Range("A1:A" & lastRow)

然后,您需要使用以下方法调整范围大小:

With rDATA On Error Resume Next Set typeRange = .Offset(1, 0).Resize(-1 + .Rows.Count).Range.SpecialCells(xlVisible) On Error GoTo 0 End With

© www.soinside.com 2019 - 2024. All rights reserved.