这里有一个类似的未解之谜:Excel Macro slicer onclick event
我有一个ListObject和一个ListObject上的Slicer。这个Slicer叫做“Year”。我可以用
Private Sub Year_Click()
doCalcsOnFilteredListObject
End Sub
只需右键单击切片器标题〉添加宏
问题是,我希望捕获的事件发生,***在***过滤器选择已经应用之后。现在,我捕获了事件,过滤器从未应用过,但calc函数在(未更改的)listobject上运行良好。
2条答案
按热度按时间bvk5enib1#
ListObjects和Slicers没有事件。您拥有的Year_Click是容器对象的事件,而不是SlicerItem的事件。
解决方法是创建一个在A1单元格上具有SUBTOTAL公式的DUMMY工作表,并在其上捕获SheetCalculate事件。因此,当您单击Slicer时,它会在过滤后重新计算DUMMY!A1上的公式。
程序:
1.创建一个名为“DUMMY”的新工作表,并在A1单元格中放入公式:“=SUBTOTAL(109,Table 1 [YEAR])".(根据您的ListObject和Column名称进行适当调整。)
1.放入此VBA程序。
1.在切片器中选择条件。
这将触发所需的事件并调用自定义过程。
请注意,必须打开“自动计算”。如果要手动计算,可以使用Workbook_Open将除DUMMY工作表之外的所有工作表设置为手动计算。
6l7fqoea2#
在Wils Mils的回答基础上进行改进,我个人更喜欢将公式放置在工作表本身的
WorkBook.SlicerCache
所在的位置,并使用该工作表的Calculate
事件。通过这种方式,您可以更清楚地将对应于每一个的代码与关联表所在的工作表分开。如果与
WorkBook.SlicerCache
相关联的表所在的工作表已经具有计算公式,则不需要添加任何其他公式,只需利用Calculate事件循环遍历WorkBook.SlicerCache
的.SlicerItems
,并查看选择了多少个公式以及哪些公式。请注意,每个
WorkBook.SlicerCache
可以在多个工作表上具有.Slicers
的多个示例,但选择或不选择的.SlicerItems
特定于公共.SlicerCache
。一切顺利