2017-01-05 6 views
0

ブック内の各ワークシートをループして、すべてのピボットデータ範囲を範囲(「D1_Data」)にリセットする前にリフレッシュします。 現在、以下のコードでランタイムエラー '1004'が表示され、多少なりとも問題はありませんか?VBAブック内の各ピボットについてデータソース範囲

「TemplateWB」は、コードが現在で動作しているブックとしてどこ私のコードでは他に事前に設定されていることに注意してください。

'Set Dim 
    Dim PT As PivotTable 
    Dim WS As Worksheet 

'Set D1_Data 
    TemplateWB.Sheets("Data_1").Range(Cells(1, 1), Cells(NewLastRow, NewLastColumn + 4)).Name = "D1_Data" 

    For Each WS In TemplateWB.Worksheets 

     For Each PT In WS.PivotTables 

     With PT.PivotCache 
      .SourceData = Range("D1_Data").Address(True, True, xlR1C1, True) 
      .Refresh 
     End With 

     Next PT 

    Next WS 
+0

すべてのピボットテーブルに同じデータソースがありますか? 'TemplateWB.Sheets(" Data_1 ")'で? –

+0

@ShaiRadoはい、同じソースを指している2つのタブに4つのピボットテーブルがあります。 – Karm

+0

Strange。それは動作するはずです。 1つのピボットテーブルのみ、または異なるデータソースを持つ複数のピボットテーブルで、またはデータソースが変更されない場合にのみ機能します。しかし、すべてのピボットが同じソースデータを持つとすぐに、クラッシュします。 – grominet

答えて

1

私は全体の複数のピボットテーブルの上にそれをテストした(以下のコードを試してみてください別のワークシートとそれが働いた)。

Option Explicit 

Sub AutoRefreshPivot() 

Dim WS As Worksheet 
Dim PT As PivotTable 
Dim PTCache As PivotCache 

Dim NewLastRow As Long, NewLastColumn As Long 
Dim TemplateWB As Workbook  

' values for my internal testing 
'Set TemplateWB = ThisWorkbook 
'NewLastRow = 11 
'NewLastColumn = 4 

'Set D1_Data 
TemplateWB.Sheets("Data_1").Range(Cells(1, 1), Cells(NewLastRow, NewLastColumn + 4)).Name = "D1_Data" 

For Each WS In TemplateWB.Worksheets 

    For Each PT In WS.PivotTables 
     ' set Pivot Cache to updated data source range (per each Pivot Table) 
     Set PTCache = TemplateWB.PivotCaches.Create(SourceType:=xlDatabase, _ 
      SourceData:=Range("D1_Data").Address(True, True, xlR1C1, True), _ 
      Version:=xlPivotTableVersion14) 

     With PT 
      .ChangePivotCache PTCache 
      ' .Refresh 
     End With 
     ' need to clear the cache every time after being used for a Pivot table 
     Set PTCache = Nothing 
    Next PT 
Next WS 

End Sub 
+0

あなたの更新された回答は魅力のように働いた、ありがとう! – Karm

+0

@Karmあなたは大歓迎です:) –

関連する問題