Dan*_*her 5 excel vba autofilter excel-vba excel-formula
这个问题实际上是Excel GUI,而不是Excel"编程"本身.但是,如果在GUI中不可用,我会很好奇是否有VBA解决方案(尽管我基本上有0个VBA知识/经验).
有没有办法看到Excel中哪些过滤器处于活动状态,而不仅仅是查看漏斗图标? 如我附带的屏幕截图所示,某些电子表格可以包含从可见屏幕延伸出来的列,因此很容易错过指示活动过滤器的漏斗图标.(此外,我认为忽略图标很容易,即使只有几列.)
理想情况下,会有某种列表显示哪些列/标题被主动过滤.
谢谢.
这将突出显示包含活动过滤器的列。此代码只是加粗并设置字体颜色为红色,但您可以根据需要修改样式更改。
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)
如果您只想要应用过滤器的列的简单列表,那么以下 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