Excel VBA操作切片器切换显示不同的图表

标签: VBA,切片器
在《 使用Excel切片器切换图表 》中,我们看到可以根据切片器中的选择来显示图表,但只是给出了简略的介绍。这段时间抽空研究了一下,给出制作过程。
切片器是显示汇总数据最有吸引力的方式之一。Excel 2010中引入的切片器是一种将数据列表显示为页面上按钮的方法。
单击按钮可以在项目列表中分离出一个项目,如下图1所示。

图1
汇总表上方的切片器显示了汇总(全部)。在这个表旁边,我想显示一个图表,如果选择了全部,则显示数据的堆积柱形图,如果选择切片器框中的一个单独的区域,则显示单一的簇状柱形图,如下图2所示。

图2
其实,这里创建了两个图表,一个是堆积柱形图,另一个是二维簇状柱形图。使这些图表大小相同并重叠。注意这些图表的名称,因为这将在编码过程中变得非常重要。
再回过头来,看看数据源,如下图3所示。

图3
创建汇总数据表如下图4所示。

图4
创建数据透视表,如下图5所示。

图5
创建切片器,注意切片器的名称,如下图6所示。

图6
在数据透视表工作表代码模块中输入下面的事件代码:
Private Sub Worksheet_PivotTableChangeSync(ByVal Target As PivotTable)
Dim slItem As SlicerItem
With ActiveWorkbook.SlicerCaches("切片器_数据")
For Each slItem In .VisibleSlicerItems
If slItem.Name = "全部" Then
ActiveSheet.Shapes("Chart 1").ZOrder msoSendToBack