首页 > 解决方案 > 如何使用 VBA 检查是否在 Excel 中应用了特定过滤器?

问题描述

我在工作表中有以下数据:

在此处输入图像描述


我需要做的是检查(使用 VBA)是否将以下过滤器应用于Manager列:

在此处输入图像描述


使数据看起来像这样:

在此处输入图像描述

我做了一些研究Worksheets(1).AutoFilterMode,它只告诉我是否应用了过滤器。

最后,我遇到了这个答案,并尝试了以下代码:

Dim datarange as Range

Set datarange = Worksheets("Sales Data").Range("B2:B11")

If testrange.SpecialCells(xlCellTypeVisible).Count = 4 Then
    ' some code
End If

现在它工作得很好。我知道这不是一个完美的解决方案。如果数据更改,它将不起作用。有什么方法可以检查Manager列是否被Manager 1过滤?

标签: excelvbaautofilter

解决方案


你可以试试类似的

Sub TestFilter()

    Dim I As Long
    
    With Worksheets(1).AutoFilter
        For I = 1 To .Filters.Count
            If .Filters(I).On Then
                MsgBox "Column: " & I & "; Criteria1: " & .Filters(I).Criteria1
            End If
        Next I
    End With
    
End Sub

如果您只有一个标准,则效果很好,否则该语句

             MsgBox "Column:" & I & "; Criteria1:" & .Filters (I) .Criteria1

将导致运行时错误。

要获取列标题,您可以使用

                MsgBox "Column: " & .Range(1, I) & "; Criteria1: " & .Filters(I).Criteria1

推荐阅读