Pivot Table VBA Error from Recorded Macro

后端 未结 1 1771
北恋
北恋 2021-01-29 10:08

Below is my update to the code. TableX is the referenced table that my pivot tables will use. After declaring the \'shtReport\' variable as a Worksheet and further naming the va

相关标签:
1条回答
  • 2021-01-29 10:46

    The code below will get you started on automating the creation and updating of PivotTables in VBA:

    Option Explicit
    
    Sub SutoPivot()
    
    Dim PvtTbl                          As PivotTable
    Dim PvtCache                        As PivotCache
    
    ' set the Pivot Cache  (NOT SURE what is "TableX" ?)
    Set PvtCache = ActiveWorkbook.PivotCaches.Create(SourceType:=xlDatabase, SourceData:="TableX", Version:=xlPivotTableVersion14)
    
    ' add this line in case the Pivot table doesn't exit >> first time running this Macro
    On Error Resume Next
    Set PvtTbl = Worksheets("Invoice Data").PivotTables("PivotTable1a")
    
    On Error GoTo 0
    If PvtTbl Is Nothing Then
        ' create a new Pivot Table in "Invoice Data" sheet, start from Cell Y1
        Set PvtTbl = shtReport.PivotTables.Add(PivotCache:=PvtCache, TableDestination:=Worksheets("Invoice Data").Range("Y1"), TableName:="PivotTable1a")
    
        With PvtTbl.PivotFields("Director")
            .Orientation = xlRowField
            .Position = 1
        End With
    
        With PvtTbl.PivotFields("Manager")
            .Orientation = xlRowField
            .Position = 2
        End With
    
        With PvtTbl.PivotFields("Owner")
            .Orientation = xlRowField
            .Position = 3
        End With
    
        With PvtTbl.PivotFields("Account Name")
            .Orientation = xlRowField
            .Position = 4
        End With
    
        With PvtTbl.PivotFields("Business Name")
            .Orientation = xlRowField
            .Position = 5
        End With
    
        PvtTbl.AddDataField PvtTbl.PivotFields("Annual Aggregate Volume"), _
            "Sum of Annual Aggregate Volume", xlSum
    
        With PvtTbl.PivotFields("Sum of Annual Aggregate Volume")
            .NumberFormat = "#,##0"
        End With
    
    Else
        ' just refresh the Pivot cache with the updated Range  
        PvtTbl.ChangePivotCache PvtCache
        PvtTbl.RefreshTable
    End If
    
    End Sub
    
    0 讨论(0)
提交回复
热议问题