一种验证特定过滤器内容的方法

时间:2016-07-06 13:44:31

标签: vba excel-vba excel

我有一个电子表格,它对几列数据使用过滤器。其中一列有10种不同的可能值。我想验证是否存在特定的过滤器 - 即,不仅仅是autofiltermode = true - 而是要实际检查该过滤器的值是什么。有没有办法在vba中执行此操作?

例如,如果我可能想要确保用户只查看customers,我的字段中的10个值中的1个。所以我希望我可以说if filtervalue = "customers" then之类的东西。

此外,我不想验证手机数据,我还在询问是否有办法验证过滤器。

1 个答案:

答案 0 :(得分:2)

下面的示例代码将检查给定包含过滤器的范围的第一个单元格的条件选择,以及要检查的列的索引。

Option Explicit

Sub Test()
    'first argument is first cell of headers being filtered
    'second argument is column to check for filter criteria
    Debug.Print GetCriteria(Sheet1.Range("A1"), 3)
End Sub

Function GetCriteria(rng As Range, lngFilterIndex As Long) As String

    Dim strCriteria As String
    Dim objFilter As AutoFilter
    Dim lngCriteriaCount As Long
    Dim lngCounter As Long

    Set objFilter = rng.Parent.AutoFilter

    ' no autofilter
    If objFilter Is Nothing Then
        GetCriteria = ""
        Exit Function
    End If

    ' autofilter but no selection
    If Not objFilter.Filters(lngFilterIndex).On Then
        GetCriteria = ""
        Exit Function
    End If

    ' iterate criteria
    strCriteria = ""
    lngCriteriaCount = objFilter.Filters(lngFilterIndex).Count
    If lngCriteriaCount = 1 Then
        strCriteria = objFilter.Filters(lngFilterIndex).Criteria1
    Else
        For lngCounter = 1 To objFilter.Filters(lngFilterIndex).Count
            strCriteria = strCriteria & objFilter.Filters(lngFilterIndex).Criteria1(lngCounter)
        Next lngCounter
    End If

    GetCriteria = strCriteria

End Function