捕获 Excel VBA 切片器点击事件

Trapping Excel VBA Slicer click events

这里有一个类似的未回答问题:Excel Macro slicer onclick event

我有一个 ListObject 和该 ListObject 上的切片器。切片器称为“年”。我可以用

捕获点击事件
Private Sub Year_Click()
   doCalcsOnFilteredListObject
End Sub

只需右键单击切片器标题 > 添加宏

问题是我希望陷阱事件发生,应用过滤器选择之后。现在,我捕获事件,从未应用过滤器,但计算函数在(未更改的)列表对象上运行良好。

ListObjects 和 Slicers 没有事件。您拥有的 Year_Click 是容器对象的事件,而不是 SlicerItem 的事件。

解决方法是创建一个 DUMMY 作品sheet,它在 A1 单元格上有 SUBTOTAL 公式,并在其上捕获 SheetCalculate 事件。这样当你点击切片器时,它会在过滤后重新计算 DUMMY!A1 上的公式。

程序:

  1. 创建一个名为“DUMMY”的新 sheet 并将公式放入 A1 单元格:“=SUBTOTAL(109, Table1[YEAR])”。 (适当调整您的 ListObject 和列名称。)

  2. 把这个VBA程序。

Private Sub Workbook_SheetCalculate(ByVal Sh As Object)
  If Sh.Name = "DUMMY" Then
    doCalcsOnFilteredListObject
  End If
End Sub
  1. Select 切片器中的条件。

这应该会触发所需的事件并调用您的自定义过程。

请注意必须打开自动计算。如果您想要手动计算,有一种使用 Workbook_Open 的技术可以将除 DUMMY sheet.

之外的所有 sheet 设置为手动计算