当用录制宏的方式录制数据透视表是否显示分类汇总时,录制的宏代码如下:
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
发表评论