Worksheet_change 事件和切片器过滤器连接冲突
Worksheet_change event and slicer filter connection conflict
我有一个问题困扰了我几天,所以我决定与你分享,也许你已经偶然发现了同样的问题。
===这是上下文:===
我正在处理这个 excel 文件,其中包含以下三个选项卡:
- 一个名为 "Data",我在其中以常规 table 存储文件所需的数据;
- 第二个,称为 "Chart_1",其中可以找到 pivot_table_1 和 chart_1。这些对象的来源在 "Data" 选项卡中。
- 第三个选项卡称为 "Chart_2",包含 pivot_table_2 和 chart_2。这些对象也来自 "Data" 选项卡。
我在选项卡 "Chart_1" 中有五个切片器,在选项卡 "Chart_2" 中有另外五个。所有切片器都连接到 "Chart*" 选项卡中的两个 pivot_tables。
我使用 VBA 作为选项卡中的图表格式,作为 Worksheet_Change 事件。
=== 这就是问题所在:===
当我 select 切片器中的某些内容(以 "Chart*" 选项卡为准)时,它总是会激活 "Chart_2"。
如果我单击选项卡 "Chart_1" 中的其中一个切片器,当宏完成 运行ning 时,选项卡 "Chart_2" 将被激活。
当我单击选项卡 "Chart_2" 中的一个切片器时,一切正常,因为激活的选项卡没有改变。
无论我使用哪个切片器(无论它嵌入在哪个选项卡中),VBA 始终是 运行 首先是 "Chart_1" 的 Worksheet_Change,然后是 "Chart_2" 的 Worksheet_Change.我认为这是由于过滤器连接而发生的:当我单击一个切片器时,它将触发所有受影响的 Worksheet_Change 事件。
=== 这是我已经尝试过的:===
- 有一个全局变量,我在其中存储作品对应标签的名称。没有工作,因为两个选项卡中的两个宏都被执行了。我用计数器尝试了同样的方法,但同样失败了。
- 寻找一个 OnClick 事件,我可以在其中保存我在 "Chart*" 的宏 运行 之前最后一次单击的选项卡的名称。没有找到任何 OnClick 事件,呃。
- 上次我clicked/selected想过要一个全局变量来存放切片器sheet的名字,但是不知道怎么弄。你认为这行得通吗?我该如何实施?
所以,这是我现在的 logic/programming 问题。您对我如何解决它有什么建议吗?我只想停留在单击切片器时所在的选项卡中...
如评论中所述:
图表 1-Sheet:
Public GoodNameForAVariable As String
Private Sub Worksheet_Change(ByVal Target As Range)
GoodNameForAVariable = ActiveSheet.Name
'Your code happens here
End Sub
图表 2-Sheet:
Private Sub Worksheet_Change(ByVal Target As Range)
'Your code happens here
ThisWorkbook.Sheets(GoodNameForAVariable).Activate
End Sub
我有一个问题困扰了我几天,所以我决定与你分享,也许你已经偶然发现了同样的问题。
===这是上下文:===
我正在处理这个 excel 文件,其中包含以下三个选项卡: - 一个名为 "Data",我在其中以常规 table 存储文件所需的数据; - 第二个,称为 "Chart_1",其中可以找到 pivot_table_1 和 chart_1。这些对象的来源在 "Data" 选项卡中。 - 第三个选项卡称为 "Chart_2",包含 pivot_table_2 和 chart_2。这些对象也来自 "Data" 选项卡。 我在选项卡 "Chart_1" 中有五个切片器,在选项卡 "Chart_2" 中有另外五个。所有切片器都连接到 "Chart*" 选项卡中的两个 pivot_tables。 我使用 VBA 作为选项卡中的图表格式,作为 Worksheet_Change 事件。
=== 这就是问题所在:===
当我 select 切片器中的某些内容(以 "Chart*" 选项卡为准)时,它总是会激活 "Chart_2"。 如果我单击选项卡 "Chart_1" 中的其中一个切片器,当宏完成 运行ning 时,选项卡 "Chart_2" 将被激活。 当我单击选项卡 "Chart_2" 中的一个切片器时,一切正常,因为激活的选项卡没有改变。 无论我使用哪个切片器(无论它嵌入在哪个选项卡中),VBA 始终是 运行 首先是 "Chart_1" 的 Worksheet_Change,然后是 "Chart_2" 的 Worksheet_Change.我认为这是由于过滤器连接而发生的:当我单击一个切片器时,它将触发所有受影响的 Worksheet_Change 事件。
=== 这是我已经尝试过的:===
- 有一个全局变量,我在其中存储作品对应标签的名称。没有工作,因为两个选项卡中的两个宏都被执行了。我用计数器尝试了同样的方法,但同样失败了。
- 寻找一个 OnClick 事件,我可以在其中保存我在 "Chart*" 的宏 运行 之前最后一次单击的选项卡的名称。没有找到任何 OnClick 事件,呃。
- 上次我clicked/selected想过要一个全局变量来存放切片器sheet的名字,但是不知道怎么弄。你认为这行得通吗?我该如何实施?
所以,这是我现在的 logic/programming 问题。您对我如何解决它有什么建议吗?我只想停留在单击切片器时所在的选项卡中...
如评论中所述:
图表 1-Sheet:
Public GoodNameForAVariable As String
Private Sub Worksheet_Change(ByVal Target As Range)
GoodNameForAVariable = ActiveSheet.Name
'Your code happens here
End Sub
图表 2-Sheet:
Private Sub Worksheet_Change(ByVal Target As Range)
'Your code happens here
ThisWorkbook.Sheets(GoodNameForAVariable).Activate
End Sub