Excel:根据select的切片器值dynamic更改图表计算types

我有一个跟踪公司不同财务状况的仪表板。 此仪表板上的一个图表显示了用户在切片机中select的任何值的年度总计。

我遇到的问题是图表总是显示每个月的价值sum ,有时average会更合适。

有没有办法让图表根据select的切片器更新计算types?

这里是代码(工作不正常)(信贷给@ARICH):

 Private Sub Workbook_SheetPivotTableUpdate(ByVal Sh As Object, ByVal Target As PivotTable) On Error GoTo err1 Dim S As Slicer Dim sI As SlicerItem Dim PT As PivotTable ' Application.EnableEvents = False Set S = ThisWorkbook.SlicerCaches("Slicer_Type").Slicers("Type") For Each sI In S.SlicerCache.SlicerItems If sI.HasData And sI.Selected Then If sI.Caption = "Headcount" Then With Target.PivotFields("Sum of Value") .Caption = "Average of Value" .Function = xlAverage End With Exit For Else With Target.PivotFields("Average of Value") .Caption = "Sum of Value" .Function = xlSum End With Exit For End If End If Next err1: ' Application.EnableEvents = True End Sub 

总之:没有。 你正在寻找的是一个事件,当你从一个切片机切换到另一个时激发。 但是在Excel中没有任何事件捕获切片器的selection或其activation或任何其他可用的事件。

然而,如果你愿意用hoverforms创build你自己的切片机(无模式),那么你将能够捕获该事件。

正如拉尔夫所说,没有切片机select事件。 但是,存在数据透视表事件,其中之一是PivotTable_Update事件 。 我们可以使用这个事件来做你正在谈论的事情:

 Private Sub Workbook_SheetPivotTableUpdate(ByVal Sh As Object, ByVal Target As PivotTable) On Error GoTo err1 Dim S As Slicer Dim SI As SlicerItem Dim PT As PivotTable Application.EnableEvents = False Set S = ThisWorkbook.SlicerCaches(1).Slicers("YourSlicer") For Each SI In S.SlicerCache.SlicerItems If SI.HasData And SI.Selected Then If SI.Caption = "Your Criteria" Then Target.PivotFields("YourField").Function = xlAverage Exit For Else Target.PivotFields("YourField").Function = xlSum Exit For End If End If Next err1: Application.EnableEvents = True End Sub 

这种方式的工作原理是,每次您select切片器时,切片器都会过滤它所连接的数据透视表。 过滤数据透视表的行为被认为是对数据透视表的更新,所以数据透视表更新事件被触发。

此代码将放置在工作簿的ThisWorkbook模块中。 (还有一个名为Worksheet_PivotTableUpdate的工作表特定版本,您可以将它放在Worksheet_PivotTableUpdate表模块中,剩下的代码将保持不变。)

您必须对代码进行一些更改才能符合您的工作簿。 例如,我不知道您的工作簿中有多less切片caching,上面的代码使用第一个。 您还需要将Slicer_Name更改为您要使用的条件的切片器的名称。 此代码假定只有一个切片器select足以判断是否使用平均值或总和,但可以在更改计算types之前将其修改为需要多次select。