Excel VBA:找出启用了筛选器的行

Excel VBA:找出启用了筛选器的行,excel,vba,Excel,Vba,我正在查看VBA中的各种选项,以找出启用了过滤器的工作表中的行号 If ThisWorkbook.Sheets(1).AutoFilterMode = True Then 上一行仅检查工作表是否包含过滤器,但我需要知道哪个行号有过滤器。这是对您问题的直接回答: Function CheckWhichRowHasFilter(r As range) For Each rowi In r.Rows' Dim rowi As range Set pa = rowi.Parent.AutoFilter

我正在查看VBA中的各种选项,以找出启用了过滤器的工作表中的行号

If ThisWorkbook.Sheets(1).AutoFilterMode = True Then

上一行仅检查工作表是否包含过滤器,但我需要知道哪个行号有过滤器。

这是对您问题的直接回答:

Function CheckWhichRowHasFilter(r As range)
For Each rowi In r.Rows' Dim rowi As range
Set pa = rowi.Parent.AutoFilter'Dim pa As AutoFilter
If pa.FilterMode = True Then
  CheckWhichRowHasFilter = pa.range.Address
    Exit For
End If
Next rowi
End Function
这是如何迭代过滤器。要检查的属性是Filter.On

Sub IterateThroughFilters()
Dim r As range
Set r = Selection
Dim rc As range
For Each rc In r.Columns
   If Not rc.Parent.AutoFilter Is Nothing Then
    Set currentColumnFilter = rc.Parent.AutoFilter ' Filteraddress: = currentColumnFilter.range.Address
       Dim ccf As filters
       Set ccf = currentColumnFilter.filters
         Dim cf1 As filter
         Set cf1 = ccf(1) 'onebased index
             If cf1.On Then 'Here you check if filter is on

                cfc1 = cf1.Criteria1(1)
                cfc2 = cf1.Criteria1(2)
                cfc3 = cf1.Criteria1(3)
            End If
   End If

Next rc

End Sub

这应该是你的工作

 Sub test()

    Dim rngRange        As range

    If ThisWorkbook.Sheets(1).AutoFilterMode = True Then
        Set rngRange = ThisWorkbook.Sheets(1).AutoFilter.range
        MsgBox "Address of Filter: " & rngRange.Address & Chr(10) _
                & "Row Number is: " & rngRange.Row, vbOKOnly
    End If

    Set rngRange = Nothing

End Sub

为什么您需要迭代“for each”循环以找到自动筛选?我想他对启用哪些筛选很感兴趣。每行可以打开一些过滤器,也可以关闭一些过滤器。目前还不清楚他是否希望遍历行列以查找它们。一个工作表最多只能应用一个筛选器。因此,ThisWorkbook.Sheets(1).AutoFilter.range将完成此工作。