如何用vba显示或者取消数据透视表的分类汇总?

当用录制宏的方式录制数据透视表是否显示分类汇总时,录制的宏代码如下:

Sub 宏3()
    ActiveSheet.PivotTables("第一个透视表").PivotFields("姓名").Subtotals = Array(True, _
        False, False, False, False, False, False, False, False, False, False, False)
    ActiveSheet.PivotTables("第一个透视表").PivotFields("店名").Subtotals = Array(True, _
        False, False, False, False, False, False, False, False, False, False, False)
    ActiveSheet.PivotTables("第一个透视表").PivotFields("大指标").Subtotals = Array(True, _
        False, False, False, False, False, False, False, False, False, False, False)
    ActiveSheet.PivotTables("第一个透视表").PivotFields("小指标").Subtotals = Array(True, _
        False, False, False, False, False, False, False, False, False, False, False)
    ActiveSheet.PivotTables("第一个透视表").PivotFields("内容").Subtotals = Array(True, _
        False, False, False, False, False, False, False, False, False, False, False)
    ActiveSheet.PivotTables("第一个透视表").SubtotalLocation xlAtBottom
    ActiveSheet.PivotTables("第一个透视表").SubtotalLocation xlAtTop
End Sub

也就是如果要用vba显示数据透视表的分类汇总,需要遍历每个透视表字段对象PivotField,设置它的Subtotals属性。

数据透视表字段的Subtotals属性有Index属性,这个属性的值如下:

Index	Meaning
1	Automatic
2	Sum
3	Count
4	Average
5	Max
6	Min
7	Product
8	Count Nums
9	StdDev
10	StdDevp
11	Var
12	Varp

如果某个Index设置为True,那么就显示对应种类的分类汇总,如果Index 1 设置为True,那么就自动选择分类汇总的方式,其它索引都是False。

当用vba创建数据透视表后,默认的字段分类汇总方式都是自动选择的,也就是Index 1 设置为True,其它索引都是False。

所以如果要用VBA快速地取消数据透视表的分类汇总,只需将Index 1 设置为False即可。

代码如下:

Sub QQ1722187970()
    Dim oPC As PivotCache
    Dim oPT As PivotTable
    Dim oWB As Workbook
    Dim oWK As Worksheet
    Dim oPF As PivotField
    Set oWK = Excel.ActiveSheet
    With oWK
        iCount = .PivotTables.Count
        If iCount = 0 Then
            MsgBox "当前工作表没有数据透视表"
        Else
            Set oPT = .PivotTables(1)
            With oPT
                For Each oPF In .PivotFields
                    With oPF
                        '判断属于哪种字段,是行字段,列字段,数值字段,筛选字段,还是其它
                        iType = .Orientation
                        If iType = 1 Or iType = 2 Then
                            '直接设置index 1为False
                          .Subtotals(1) = False
                          '或者设置所有分类汇总方式为False
                            .Subtotals = Array(False, _
        False, False, False, False, False, False, False, False, False, False, False)
                        End If
                    End With
                Next
                '显示分类汇总
                .SubtotalLocation xlAtBottom
            End With
        End If
    End With
End Sub

 

       

发表评论