如何解决捕获 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 上的公式。
程序:
-
创建一个名为“DUMMY”的新工作表并在 A1 单元格中输入一个公式:“=SUBTOTAL(109,Table1[YEAR])”。 (根据您的 ListObject 和列名称进行适当调整。)
-
把这个 VBA 程序写下来。
Private Sub Workbook_SheetCalculate(ByVal Sh As Object)
If Sh.Name = "DUMMY" Then
doCalcsOnFilteredListObject
End If
End Sub
- 在切片器中选择条件。
这应该会触发所需的事件并调用您的自定义过程。
请注意,必须打开自动计算。如果您想要手动计算,有一种使用 Workbook_Open 的技术可以将除 DUMMY 表之外的所有表设置为手动计算。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。