Excel VBA筛选器更改事件处理程序

有什么方法可以确定用户何时对工作表filter进行了更改?

换句话说,是否有某种change_filter event处理程序?

是。

从这篇文章我张贴在另一个论坛上

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

 'Dummy sheet code Private Sub Worksheet_Calculate() 'Dummy Sheet has recalculated MsgBox "Your list has been filtered" End Sub 

为了手工计算

请注意,上述方法要求将工作簿计算设置为自动(VBA中的xlCalculationAutomatic)或自动除外(xlCalculationSemiAutomatic)。 如果“计算”设置为“手动”(xlCalculationManual),则需要进一步编写工作簿以便只将“虚拟”工作表设置为自动计算,其他所有closures“计算”的工作表都将被设置为“closures”。

有一个很less使用的WorkSheet属性, EnableCalculation ,可以通过Visual Basic编辑器设置为True或False。 默认设置显然是True,如果设置为False,则工作表不会计算。

EnableCalculation属性不适用于常规的Excel菜单或function区选项,因此对于那些希望通过故意保留关键表单以避免重新计算来保护Excel模型的人来说,这可能是一个有用的技巧。

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