如果数据透视表具有多个数据字段,则无法从数据透视表中删除所有小计。
无论它有多少行或列标签,只要只有一个数据字段,它就会起作用。这是我的代码:
Option Explicit
Private Sub pivot_table()
Dim wkb As Workbook
Dim sht As Worksheet
Dim sht2 As Worksheet
Dim pvtcch As PivotCache
Dim pvttbl As PivotTable
Dim pvtrange As Range
Dim pvtfield As PivotField
'-------------------------------------------------------------------------
Set wrb = ThisWorkbook
Set sht = wkb.Sheets(Plan1)
Set sht2 = wkb.Sheets.Add(After:=sht)
sht2.Name = "PVTBL"
With sht
Set pvtrange = .Range("A1").CurrentRegion
.ListObjects.Add(xlSrcRange, pvtrange, , xlYes).Name = "sourcepvt"
End With
Set pvtcch = wrb.PivotCaches.Create(SourceType:=xlDatabase, _
SourceData:="sourcepvt")
Set pvttbl = sht2.PivotTables.Add(PivotCache:=pvtcch, _
TableDestination:=sht2.Range("A3"), TableName:="Report")
With pivottbl
'code to set the row and columns labels and datafields
.RowAxisLayout xlTabularRow
.RepeatAllLabels xlRepeatLabels
On Error Resume Next
For Each campos In .PivotFields
campos.Subtotals(1) = False
.ColumnGrand = False
.RowGrand = False
Next campos
End With
Set wrb = Nothing
Set sht = Nothing
Set sht2 = Nothing
End Sub
当我尝试使用代码时,收到错误对话框运行时错误1004: 无法设置数据透视类的小计属性
答案 0 :(得分:1)
您需要遍历每个PivotField
并更新每个.Subtotals
属性。有十二个。由于您不希望有任何小计,请将它们全部设置为False
。您需要忽略错误,以使循环不会停止。
For Each pvtfield In pivottbl.PivotFields
'Disable subtotals for all fields
On Error Resume Next
pvtfield.Subtotals = Array(False, False, False, False, False, False, _
False, False, False, False, False, False)
On Error GoTo 0
Next pvtfield
答案 1 :(得分:0)
在PivotField.Subtotals
的{{3}}说明中描述了答案。
如果要关闭所有小计类型,可以将Automatic
小计设置为True
(将所有其他类型都关闭)并设置为{{1} },或者使用给定的数组符号将所有12种类型都设置为False
。
小计只能为非数据字段定义。因此,您不能遍历所有False
,而应遍历PivotFields
(或RowFields
)。这样,您也可以省略ColumnFields
。
由于On Error Resume Next
和ColumnGrand
在每个数据透视表中定义一次,因此我将其放置在循环之前。
RowGrand