【问题标题】:Trapping Excel VBA Slicer click events捕获 Excel VBA Slicer 点击事件
【发布时间】:2021-07-26 21:22:46
【问题描述】:

这里有一个类似的未回答问题:Excel Macro slicer onclick event

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

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

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

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

【问题讨论】:

  • 你能补充一下你是如何设置点击事件的吗? (我不想猜测你是如何做到的,以测试一些想法)
  • 只需右键单击切片器标题>添加宏

标签: excel vba events slicers


【解决方案1】:

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

解决方法是在 A1 单元格上创建一个包含小计公式的 DUMMY 工作表,并在其上捕获一个 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 工作表。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-03-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-20
    相关资源
    最近更新 更多