我正在运行以下代码以进行过滤,然后检查过滤器是否产生了结果:
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”,因为它包含标题。上面的代码将打印该列的标题。
我将检查过滤后是否没有结果?
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