我有一个电子表格,它对几列数据使用过滤器。其中一列有10种不同的可能值。我想验证是否存在特定的过滤器 - 即,不仅仅是autofiltermode = true
- 而是要实际检查该过滤器的值是什么。有没有办法在vba中执行此操作?
例如,如果我可能想要确保用户只查看customers
,我的字段中的10个值中的1个。所以我希望我可以说if filtervalue = "customers" then
之类的东西。
此外,我不想验证手机数据,我还在询问是否有办法验证过滤器。
答案 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