首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >格式化枢轴表时运行时错误1004

格式化枢轴表时运行时错误1004
EN

Stack Overflow用户
提问于 2019-07-27 20:26:48
回答 2查看 239关注 0票数 3

我有一个Excel枢轴表,我只想做两件事:(1)应用经典PivotTable布局,(2)不显示小计。为了帮助我编写代码,我录制了一个宏。运行宏时,我得到“运行时错误'1004':无法获得工作表类的PivotTable属性。”

数据透视表是手动创建的。然后切换到数据透视,并尝试运行代码。

代码语言:javascript
复制
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 _
        )

我的期望是代码应用经典PivotTable布局,然后删除可能存在的任何小计。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-07-28 07:41:04

您的代码定位于ActiveSheet (当前可见的代码),并且只在名称为"PivotTable1“的PivotTable驻留在其上时才能工作:

代码语言:javascript
复制
ActiveSheet.PivotTables("PivotTable1")

为了使它更具体或更一般,您可以按它的名称或索引来寻址一个工作表,也可以按它的名称或索引来确定它的枢轴,例如。

代码语言:javascript
复制
ActiveSheet.PivotTables(1)
ActiveWorkbook.Sheets(3).PivotTables("PivotTable1")
ActiveWorkbook.Sheets("My Sheet Name").PivotTables(1)

如果将PivotField的用户定义的小计切换为RowFieldColumnField,则只起作用,因此我建议显式地解决这些问题,并按如下方式循环处理所有这些小计:

代码语言:javascript
复制
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
票数 0
EN

Stack Overflow用户

发布于 2019-07-28 06:41:38

与使用数组不同,您可以使用Field .PivotFields("A").Subtotals(1) = True将Subtotal默认设置为Automatic &然后在下一行中使用False关闭它。

代码:

代码语言:javascript
复制
With ActiveSheet.PivotTables("PivotTable1")

        .InGridDropZones = True
        .RowAxisLayout xlTabularRow
        .PivotFields("A").Subtotals(1) = True
        .PivotFields("A").Subtotals(1) = False
        .PivotFields("B").Subtotals(1) = True
        .PivotFields("B").Subtotals(1) = False

End With

这里有更多的信息

关闭每个字段的小计:

代码语言:javascript
复制
For Each fld In ActiveSheet.PivotTables("PivotTable1").PivotFields

    fld.Subtotals(1) = True
    fld.Subtotals(1) = False

Next
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57235809

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档