2017-01-25 4 views
-1

Ниже приводится мое обновление кода. TableX - это ссылочная таблица, которую будут использовать мои сводные таблицы. После объявления переменной «shtReport» в качестве листка и дальнейшего именования переменной возникает ошибка «Объектная переменная или с блочной переменной, не заданной».Сводная таблица Ошибка VBA от записанного макроса

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 
+0

Что линия делает ошибки происходит дальше? Где начинается макрос? – BruceWayne

+0

Привет, BruceWayne, ошибка начинается в первом разделе кода, где также начинается макрос. Я записал этот макрос и попытался выполнить запись в моих данных. Это дает мне эту ошибку. –

+0

@ J.Woe вы проверили код в моем ответе ниже? это работает для вас, как вы намеревались? –

ответ

0

Приведенный ниже код поможет вам начать работу по автоматизации создания и обновления PivotTables в 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 
Смежные вопросы