有没有办法找出用户何时对纸张过滤器进行了更改?
换句话说,是否有某种change_filter event
处理程序?
答案 0 :(得分:8)
是
我在另一个论坛上发布的article
1.A 虚拟工作表在A1中添加了一个SUBTOTAL
公式,指向主表上正在过滤的范围。
2. {em>虚拟工作表中添加了Worksheet_Calculate()
事件,当更改过滤器时SUBTOTAL
公式更新时,将触发此事件。
'Dummy sheet code
Private Sub Worksheet_Calculate()
'Dummy Sheet has recalculated
MsgBox "Your list has been filtered"
End Sub
提供手动计算
请注意,上述方法要求将工作簿计算设置为自动(VBA中的xlCalculationAutomatic)或自动除表(xlCalculationSemiAutomatic)。如果计算设置为手动(xlCalculationManual),则需要进一步编码以设置WorkBook,以便只将“虚拟”工作表设置为自动计算,所有其他工作表都关闭计算。
有一个很少使用的WorkSheet属性EnableCalculation
,可以通过Visual Basic编辑器设置为True或False。默认设置显然为True,如果设置为False,则工作表将无法计算。
常规Excel菜单或功能区选项无法使用EnableCalculation属性 - 对于那些希望通过故意保持重新计算密钥表来保护Excel模型的人来说,这可能是一个有用的技巧。
Workbook_Open
事件,将“Dummy”以外的所有工作表的EnableCalculation property
设置为False。 答案 1 :(得分:0)
这是this hidden gem answer的更详细版本。在此处发布以提高知名度。
即使Calculation
设置为Manual
也可以。?
假设您有一个图表,其中使用要过滤的表作为其数据源。
如果没有,您将需要一个。 ?
ChartSubscriber
的标准模块。Private ChartEvents As New ChartEvents
Sub SubscribeToChartEvents()
Set ChartEvents.Chart = Worksheets("Sheet with Chart").ChartObjects("Chart Name").Chart
End Sub
ChartEvents
的类模块。Public WithEvents Chart As Chart
Private Sub Chart_Calculate()
Debug.Print "Table was filtered. Do your worst!"
End Sub
Workbook_Open
上的事件。Private Sub Workbook_Open()
Call ChartSubscriber.SubscribeToChartEvents
End Sub