捕获Excel VBA切片器单击事件

xnifntxz  于 2023-04-07  发布在  其他
关注(0)|答案(2)|浏览(520)

这里有一个类似的未解之谜:Excel Macro slicer onclick event
我有一个ListObject和一个ListObject上的Slicer。这个Slicer叫做“Year”。我可以用

Private Sub Year_Click()
   doCalcsOnFilteredListObject
End Sub

只需右键单击切片器标题〉添加宏
问题是,我希望捕获的事件发生,***在***过滤器选择已经应用之后。现在,我捕获了事件,过滤器从未应用过,但calc函数在(未更改的)listobject上运行良好。

bvk5enib

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程序。

Private Sub Workbook_SheetCalculate(ByVal Sh As Object)
  If Sh.Name = "DUMMY" Then
    doCalcsOnFilteredListObject
  End If
End Sub

1.在切片器中选择条件。
这将触发所需的事件并调用自定义过程。
请注意,必须打开“自动计算”。如果要手动计算,可以使用Workbook_Open将除DUMMY工作表之外的所有工作表设置为手动计算。

6l7fqoea

6l7fqoea2#

在Wils Mils的回答基础上进行改进,我个人更喜欢将公式放置在工作表本身的WorkBook.SlicerCache所在的位置,并使用该工作表的Calculate事件。通过这种方式,您可以更清楚地将对应于每一个的代码与关联表所在的工作表分开。
如果与WorkBook.SlicerCache相关联的表所在的工作表已经具有计算公式,则不需要添加任何其他公式,只需利用Calculate事件循环遍历WorkBook.SlicerCache.SlicerItems,并查看选择了多少个公式以及哪些公式。
请注意,每个WorkBook.SlicerCache可以在多个工作表上具有.Slicers的多个示例,但选择或不选择的.SlicerItems特定于公共.SlicerCache
一切顺利

相关问题