可以将AutoFilter作为事件进行陷阱?

我正试图在报告中向用户显示filter列。 Excel给出了一个不同的图标,但对于大号没有。 列将颜色为另一种颜色像蓝色是很好的。

我发现代码有没有办法看到哪些filter是活跃在Excel中,而不仅仅是渠道图标?

  • 它适用于我,但如何启动此代码没有任何button
  • SheetChange和select更改不起作用。

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 

我将使用您在文章中提到的答案中使用的相同示例。 我回答了。 🙂

在Excel中没有filter更改事件。 我将使用一个解决方法是陷阱工作表的计算方法或更好的工作簿。

因此,在带有filter的工作表中,添加一个如下所示的虚拟公式: =SUBTOTAL(3,Sheet2!$A$1:$A$100)这只计算可见单元格。 但它取决于你。 随意使用任何公式,响应filter的变化。

在这里输入图像说明

之后,转到工作簿的代码并添加以下内容:

 Private Sub Workbook_SheetCalculate(ByVal Sh As Object) Call markFilter(Sh) MsgBox "Filter changed" End Sub 

繁荣。 现在,您正在捕获filter更改事件,它将通过触发vba代码来更新已过滤的列。

注意markFilter来自你提到的答案 。

我的文章中的关键点将变更陷入使用VBA的过滤列表

  1. A1添加一个“虚拟”工作表,使用单个SUBTOTAL公式,指向主工作表上正在过滤的范围。
  2. Worksheet_Calculate()事件被添加到“虚拟”工作表中,当事件filter更改时, SUBTOTAL公式更新时触发此事件。

接下来的两个步骤仅在需要以Manual运行工作簿计算时才需要

  1. 添加Workbook_Open事件,将除“Dummy”之外的所有工作表的EnableCalculation属性设置为False。
  2. 计算模式运行工作簿