【问题标题】:How to get the PivotFields property of the PivotTable class?如何获取 PivotTable 类的 PivotFields 属性?
【发布时间】:2020-08-06 22:09:46
【问题描述】:

我有一个数据透视表的 VBA 代码,可以从原始表中给出每个人有多少个 CN。

我收到一条错误消息

无法获取数据透视表类的 PivotFields 属性

With ws.PivotTables("PivotTable1").PivotFields("Type") 线上。

表格和理想数据透视表示例

Dim ws As Worksheet
Dim wb As Workbook
Dim pc As PivotCache
Dim pt As PivotTable

Sheets("Supplier Quality").Activate

Set ws = ActiveSheet
Set wb = ThisWorkbook

Set pc = wb.PivotCaches.Create(SourceType:=xlDatabase, SourceData:=ws.Range("Table2"))

Set pt = ws.PivotTables.Add(PivotCache:=pc, tabledestination:=ws.Range("P1"), TableName:="PivotTable1")
'
With ws.PivotTables("PivotTable1").PivotFields("Type")
    .Orientation = xlRowField
    .Position = 1
End With
With ws.PivotTables("PivotTable1").PivotFields("Task Owner2")
    .Orientation = xlColumnField
    .Position = 1
End With
ws.PivotTables("PivotTable1").AddDataField ActiveSheet.PivotTables( _
    "PivotTable1").PivotFields("Type"), "Sum of Tasks Overdue", xlSum
End Sub

【问题讨论】:

    标签: excel vba pivot-table


    【解决方案1】:
    1. ws.Range("Table2") 地址是 "a2:b28" 。因此,由于未包含该字段的范围,因此发生错误。

    2. 当您创建数据透视表然后再次将其应用到数据透视表时会出现其他问题。所以建议应用 refreshPivot 代码。


    Sub makePivot()
        Dim ws As Worksheet
        Dim wb As Workbook
        Dim pc As PivotCache
        Dim pt As PivotTable
        Dim pf As PivotField
        Dim rngDB As Range
        
        Sheets("Supplier Quality").Activate
        
        Set ws = ActiveSheet
        Set wb = ThisWorkbook
        
        Set rngDB = ws.Range("a1").CurrentRegion
        
        'Set pc = wb.PivotCaches.Create(SourceType:=xlDatabase, SourceData:=ws.Range("Table2"))
        Set pc = wb.PivotCaches.Create(SourceType:=xlDatabase, SourceData:=rngDB)
        
        Debug.Print ws.Range("Table2").Address '<~~  A2:B24   first range a2 so error occurs.
        
        Set pt = ws.PivotTables.Add(PivotCache:=pc, tabledestination:=ws.Range("P1"), TableName:="PivotTable1")
    
        
        
        With ws.PivotTables("PivotTable1").PivotFields("Type")
            .Orientation = xlColumnField
            .Position = 1
        End With
        With ws.PivotTables("PivotTable1").PivotFields("Task Owner2")
            .Orientation = xlRowField
            .Position = 1
        End With
        'ws.PivotTables("PivotTable1").AddDataField ActiveSheet.PivotTables("PivotTable1").PivotFields("Type"), "Sum of Tasks Overdue", xlSum
        Set pf = pt.PivotFields("Task Owner2")
        With pf
            .Orientation = xlDataField
            .Function = xlCount
            .Caption = "Sum of Tasks Overdue"
        End With
        'pt.AddDataField pf, "Sum of Tasks Overdue", xlCount
    
    End Sub
    

    刷新代码

    Sub refreshPivot()
        Dim ws As Worksheet
        Dim wb As Workbook
        Dim pc As PivotCache
        Dim pt As PivotTable
        Dim pf As PivotField
        Dim rngDB As Range
        
        Sheets("Supplier Quality").Activate
        
        Set ws = ActiveSheet
        Set wb = ThisWorkbook
        
        Set rngDB = ws.Range("a1").CurrentRegion
        
        'Set pc = wb.PivotCaches.Create(SourceType:=xlDatabase, SourceData:=ws.Range("Table2"))
        Set pc = wb.PivotCaches.Create(SourceType:=xlDatabase, SourceData:=rngDB)
        
        
        'Set pt = ws.PivotTables.Add(PivotCache:=pc, tabledestination:=ws.Range("P1"), TableName:="PivotTable1")
        Set pt = ws.PivotTables("PivotTable1")
        With pt
            .ChangePivotCache pc
            .ClearTable '<~~ This must be done.
            .RefreshTable
        End With
        
        With ws.PivotTables("PivotTable1").PivotFields("Type")
            .Orientation = xlColumnField
            .Position = 1
        End With
        With ws.PivotTables("PivotTable1").PivotFields("Task Owner2")
            .Orientation = xlRowField
            .Position = 1
        End With
    
        Set pf = pt.PivotFields("Task Owner2")
        With pf
            .Orientation = xlDataField
            .Function = xlCount
            .Caption = "Sum of Tasks Overdue"
        End With
    
    End Sub
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-12-21
      • 2013-06-30
      • 2020-03-10
      • 2011-07-19
      • 2018-03-19
      • 1970-01-01
      • 2018-08-12
      • 1970-01-01
      相关资源
      最近更新 更多