VBA, как проверить, если фильтр дает результаты (видимое свойство включает в себя заголовок) - PullRequest
0 голосов
/ 18 января 2020

Я выполняю следующий код для фильтрации, а затем проверяю, дал ли фильтр результаты:

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», поскольку он включает заголовок. Приведенный выше код будет печатать заголовок столбца.

Я хотел бы проверить, если после фильтрации нет результатов?

1 Ответ

0 голосов
/ 18 января 2020

Замените эту строку:

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
...