我已经看到在此处对数据透视表应用过滤器时如何调用宏:How to run a macro automatically when the selections of pivot tables are changed
但我有不同的要求,我有5个Pivot字段,每个过滤器更改都有不同的功能要执行。那么,我想知道是否可以为每个Pivot字段分配不同的宏?
我知道我可以使用worksheet_Change函数,然后使用range作为参数来检查是否在该范围内应用了过滤器。但问题是,我将把Pivot Fields移动到Column标签和宏中的行标签,这将随后调用其他宏。
我不希望这种情况发生。这就是为什么我正在寻找一种方法来检测ONE PIVOT FIELD上的枢轴滤波器变化
答案 0 :(得分:0)
是的,您可以,但这非常困难,因为PivotTable_Update事件不会告诉您哪个特定字段已更新。我找到了一种主要用于消除过程的方法,并在所有其他方法都失败的情况下使用该力。请参阅以下链接中涵盖此系列的帖子:
[编辑]如果您使用的是Excel 2010或更高版本,则更简单的替代方法是为每个PivotField设置切片器,并为原始数据透视表中的每个字段创建一个新的数据透视表,其中只包含该字段。然后通过切片器将其连接到原始数据透视表。当任何人过滤原始数据透视表或单击切片器时,它将为主数据透视表和连接到该特定字段的较小数据透视表生成PivotTable_Update事件。因此,您只需检查为其引发Update事件的数据透视表的名称,然后相应地触发相应的宏。这是概念上看起来的样子:
...这里是有条件地调用宏的代码,具体取决于用户点击的字段或切片器:
Private Sub Workbook_SheetPivotTableUpdate(ByVal Sh As Object, ByVal Target As PivotTable)
Select Case Target.Name
Case "PivotTable2": 'put name of macro you want to trigger here
Case "PivotTable3": 'put name of macro you want to trigger here
End Select
End Sub
将该代码放入ThisWorkbook代码模块中。