捕获 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 上的公式。
程序:
创建一个名为“DUMMY”的新 sheet 并将公式放入 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
- Select 切片器中的条件。
这应该会触发所需的事件并调用您的自定义过程。
请注意必须打开自动计算。如果您想要手动计算,有一种使用 Workbook_Open 的技术可以将除 DUMMY sheet.
之外的所有 sheet 设置为手动计算
这里有一个类似的未回答问题: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 上的公式。
程序:
创建一个名为“DUMMY”的新 sheet 并将公式放入 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
- Select 切片器中的条件。
这应该会触发所需的事件并调用您的自定义过程。
请注意必须打开自动计算。如果您想要手动计算,有一种使用 Workbook_Open 的技术可以将除 DUMMY sheet.
之外的所有 sheet 设置为手动计算