有没有办法看到哪些过滤器在Excel中处于活动状态,而不仅仅是漏斗图标?

Dan*_*her 5 excel vba autofilter excel-vba excel-formula

这个问题实际上是Excel GUI,而不是Excel"编程"本身.但是,如果在GUI中不可用,我会很好奇是否有VBA解决方案(尽管我基本上有0个VBA知识/经验).

有没有办法看到Excel中哪些过滤器处于活动状态,而不仅仅是查看漏斗图标? 如我附带的屏幕截图所示,某些电子表格可以包含从可见屏幕延伸出来的列,因此很容易错过指示活动过滤器的漏斗图标.(此外,我认为忽略图标很容易,即使只有几列.)

列离开屏幕的示例

理想情况下,会有某种列表显示哪些列/标题被主动过滤.

谢谢.

cyb*_*shu 5

这将突出显示包含活动过滤器的列。此代码只是加粗并设置字体颜色为红色,但您可以根据需要修改样式更改。

在此输入图像描述

Sub test()
    Call markFilter(ActiveSheet)
End Sub


Sub markFilter(wks As Worksheet)

    Dim lFilCol As Long

    With wks
        If .AutoFilterMode Then
            For lFilCol = 1 To .AutoFilter.Filters.Count

                '/ If filter is applied then mark the header as bold and font color as red
                If .AutoFilter.Filters(lFilCol).On Then
                    .AutoFilter.Range.Columns(lFilCol).Cells(1, 1).Font.Color = vbRed
                    .AutoFilter.Range.Columns(lFilCol).Cells(1, 1).Font.Bold = True
                Else
                     '/ No Filter. Column header font normal and black.
                    .AutoFilter.Range.Columns(lFilCol).Cells(1, 1).Font.Color = vbBlack
                    .AutoFilter.Range.Columns(lFilCol).Cells(1, 1).Font.Bold = False
                End If
            Next
        Else
            '/ No Filter at all. Column header font normal and black.
            .UsedRange.Rows(1).Font.Color = vbBlack
            .UsedRange.Rows(1).Font.Bold = False
        End If
    End With
End Sub
Run Code Online (Sandbox Code Playgroud)


Ral*_*lph 5

如果您只想要应用过滤器的列的简单列表,那么以下 VBA 代码可能就足够了:

Option Explicit

Function FilterCrit() As String

Dim i As Long
Dim ws As Worksheet
Dim Filter As String

'Application.Volatile

Set ws = ThisWorkbook.Worksheets(1)

If Not ws.FilterMode Then
    FilterCrit = "not filtered"
    Exit Function
End If
For i = 1 To ws.AutoFilter.Filters.Count
    If ws.AutoFilter.Filters(i).On Then
        FilterCrit = FilterCrit & "Filter on column " & i & Chr(10)
    End If
Next i

End Function
Run Code Online (Sandbox Code Playgroud)

这将迭代列,如果对这些列中的任何一个应用了过滤器,那么它将被列出。

默认情况下,所有 UDF用户定义函数都不是易失性的,因此不会自动重新计算。但是,您可以强制它们使用Application.Volatile自动重新计算。但强烈建议不要使用此选项,因为它会严重减慢 Excel 文件的速度。此处推荐替代解决方案:Alternative to Application.Volatile to auto update UDF