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


发表评论