微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

捕获 Excel VBA 切片器单击事件

如何解决捕获 Excel VBA 切片器单击事件

一个类似的悬而未决的问题在这里Excel Macro slicer onclick event

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

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

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

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

解决方法

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

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

程序:

  1. 创建一个名为“DUMMY”的新工作表并在 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. 在切片器中选择条件。

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

请注意,必须打开自动计算。如果您想要手动计算,有一种使用 Workbook_Open 的技术可以将除 DUMMY 表之外的所有表设置为手动计算。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。