excel - 如何使用vba从具有多个数据字段的Excel数据透视表中删除小计

标签 excel vba pivot-table subtotal

如果数据透视表具有多个数据字段,我无法从该数据透视表中删除所有小计。

无论它有多少行或列标签,只要它只有一个数据字段,它就可以工作。这是我的代码:

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: 无法设置数据透视字段类的小计属性

最佳答案

答案在 Microsoft's 中描述。 PivotField.Subtotals 的解释。

如果您想关闭所有小计类型,您可以将自动小计设置为True(关闭所有其他类型)并再次设置为 False,或者使用给定的数组表示法将所有 12 种类型设置为 False

只能为非数据字段定义小计。因此,您不能循环遍历所有PivotFields,而是循环遍历RowFields(或ColumnFields)。通过此,您还可以省略On Error Resume Next

由于 ColumnGrandRowGrand 每个数据透视表定义一次,因此我将其放置在循环之前。

With pvttbl
    .RowAxisLayout xlTabularRow
    .RepeatAllLabels xlRepeatLabels
    ' defined once per pivottable:
    .ColumnGrand = False
    .RowGrand = False
    ' use RowFields only:
    For Each campos In .RowFields
        ' either this:
        campos.Subtotals(1) = True   ' Automatic on (= all other off)
        campos.Subtotals(1) = False  ' Automatic also off

        ' or that (all 12 off):
        'campos.Subtotals = Array(False, False, False, False, False, False, False, False, False, False, False, False)
    Next campos
End With

关于excel - 如何使用vba从具有多个数据字段的Excel数据透视表中删除小计,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55753103/

相关文章:

C# OLEDB 保护查询中的撇号

r - 如何通过某些变量折叠数据框,对其他变量取平均值

vba - Excel VBA 替换问号

Laravel - 我应该在哪个模型上定义数据透视表?

excel - 按过去 14 天数据透视表筛选 Excel 2010

如果文件以编程方式打开,则 Excel 工作簿 ADO 查询本身在第一次运行时失败

excel - 以编程方式将按钮添加到 WorkbookOpen 上的工作表

excel - 将行复制到主工作表中

excel - 找到满足条件的单元格对然后做一些excel vba

vba - Excel卡住太多行