记录宏的数据透视表VBA错误

时间:2017-01-25 22:22:09

标签: excel vba excel-vba pivot-table

以下是我对代码的更新。 TableX是我的数据透视表将使用的引用表。宣布' shtReport'变量作为工作表并进一步命名变量,错误'对象变量或With块变量未设置'发生。

Option Explicit

    Sub SutoPivot()

    Dim PvtTbl                          As PivotTable
    Dim PvtCache                        As PivotCache
    Dim shtReport                       As Worksheet

    ' set the Pivot Cache  (NOT SURE what is "TableX" ?)
    Set PvtCache = ActiveWorkbook.PivotCaches.Create(SourceType:=xlDatabase, SourceData:="TableX", Version:=xlPivotTableVersion14)
    Set shtReport = Worksheets("Invoice Data")

    ' 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("Sales 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

        With PvtTbl.PivotFields("Annual Aggregate Volume")
            .Orientation = xlValuesField
            .Position = 1
        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

1 个答案:

答案 0 :(得分:0)

以下代码将帮助您开始自动创建和更新VBA中的equalTo

PivotTables