我有一个Excel数据透视表,我只想做两件事:(1)应用Classic PivotTable
布局,和(2)不显示小计。为了帮助我编写代码,我记录了一个宏。运行宏时,出现“运行时错误'1004':无法获取Worksheet类的PivotTable
属性”。
数据透视表是手动创建的。然后,我切换到“数据透视”并尝试运行代码。
With ActiveSheet.PivotTables("PivotTable1")
.InGridDropZones = True
.RowAxisLayout xlTabularRow
End With
ActiveSheet.PivotTables("PivotTable1").PivotFields( _
"A" _
).Subtotals = Array(False, False, False, False, False, False, False, False, False, False _
, False, False)
ActiveSheet.PivotTables("PivotTable1").PivotFields("B").Subtotals _
= Array(False, False, False, False, False, False, False, False, False, False, False, False _
)
我的期望是该代码将应用Classic
PivotTable
布局,然后删除可能存在的任何小计。 最佳答案
您的代码处理ActiveSheet
(当前可见的代码)并且仅在名称为“ PivotTable1”的PivotTable
驻留在其上时起作用:
ActiveSheet.PivotTables("PivotTable1")
为了使其更具体或更笼统,您可以通过工作表的名称或索引,也可以通过数据透视表的名称或索引,例如。 G。
ActiveSheet.PivotTables(1)
ActiveWorkbook.Sheets(3).PivotTables("PivotTable1")
ActiveWorkbook.Sheets("My Sheet Name").PivotTables(1)
如果该枢轴字段用作
PivotField
或RowField
,则仅切换用户定义的ColumnField
小计有效,因此我建议明确地解决这些小计,并像这样遍历所有这些:Private Sub SwitchAllSubtotalsOnOrOff()
Dim pt As PivotTable
Dim pf As PivotField
Set pt = ActiveSheet.PivotTables(1)
With pt
.InGridDropZones = True
.RowAxisLayout xlTabularRow
For Each pf In .RowFields
'pf.Subtotals(1) = True ' automatic on (= all other off)
'pf.Subtotals(1) = False ' automatic also off
' all 11 userdefined on (sum, count, average, max, min, product, count nums, stdev, stdevp, var, varp)
'pf.Subtotals = Array(False, True, True, True, True, True, True, True, True, True, True, True)
' all 12 off (= none)
pf.Subtotals = Array(False, False, False, False, False, False, False, False, False, False, False, False)
Next pf
For Each pf In .ColumnFields
If Not IsError(pf.GroupLevel) Then
pf.Subtotals = Array(False, False, False, False, False, False, False, False, False, False, False, False)
End If
Next pf
End With
End Sub