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

beh*_*nam 6 excel vba excel-vba

有没有办法弄清楚用户何时更改了纸张过滤器?

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

bre*_*tdj 8

是.

从这篇文章我发布在另一个论坛上

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

'Dummy sheet code
Private Sub Worksheet_Calculate()
'Dummy Sheet has recalculated
    MsgBox "Your list has been filtered"
End Sub
Run Code Online (Sandbox Code Playgroud)

迎合手工计算

请注意,上述方法要求将工作簿计算设置为自动(VBA中的xlCalculationAutomatic)或自动除表(xlCalculationSemiAutomatic).如果计算设置为手动(xlCalculationManual),则需要进一步编码以设置WorkBook,以便只将"虚拟"工作表设置为自动计算,所有其他工作表都关闭计算.

有一个很少使用的WorkSheet属性,EnableCalculation可以通过Visual Basic编辑器设置为True或False.默认设置显然为True,如果设置为False,则工作表将无法计算.

EnableCalculation属性不适用于常规Excel菜单或功能区选项 - 因此,对于希望通过故意保持重新计算密钥表来保护Excel模型的人来说,这可能是一个有用的技巧.

  1. 添加Workbook_Open事件以将EnableCalculation property"Dummy"以外的所有工作表设置为False.
  2. 在计算模式下运行工作簿.