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模型的人来说,这可能是一个有用的技巧。
- 添加
Workbook_Open
事件,将除“Dummy”之外的所有工作表的EnableCalculation property
设置为False。 - 以计算模式运行工作簿。