2017-03-21 29 views
0

ブックにピボットテーブルが2つあり、データソースを動的に変更してピボットテーブルを更新する次のコードがあります。最初のFor Each ptループをループしてコードが正常に実行され、最初のピボットテーブルがリフレッシュされます。それは第二ピボットテーブルのためにループしたときただし、コードがエラーでpt.ChangePitvotCacheでクラッシュ:実行時エラー '5':無効なポシジョン呼び出しまたは引数

Run-time error = '5': invalid procedure call or argument"

いできるだけ早く私は以上1 Pivot-を持っているように、これは動作しない理由に助けることができる誰もコードのテーブル?

Dim ws As Worksheet 
Dim pvtCache As PivotCache 
Dim pt As PivotTable 
Dim newRange As String 

Set DataSource = DataSht.Range("A1", DataSht.Range("A1").End(xlToRight).End(xlDown)) 

newRange = DataSht.Name & "!" & DataSource.Address(ReferenceStyle:=xlR1C1) 

Set pvtCache = ActiveWorkbook.PivotCaches.Create(SourceType:=xlDatabase, SourceData:=newRange) 

For Each ws In ActiveWorkbook.Worksheets 
    For Each pt In ws.PivotTables 
     pt.ChangePivotCache pvtCache 
     pt.RefreshTable 
    Next pt 
Next ws 

答えて

0

あなたが最初PivotTableに設定した後pvtCacheを「リセット」する必要があります。

したがって pvtCacheにして、ループ内に「リセット」する必要があります。

は、以下のコードを試してください:

For Each ws In ActiveWorkbook.Worksheets 
    For Each pt In ws.PivotTables 
     Set pvtCache = ActiveWorkbook.PivotCaches.Create(SourceType:=xlDatabase, SourceData:=newRange) 
     pt.ChangePivotCache pvtCache 
     pt.RefreshTable 
     Set pvtCache = Nothing 
    Next pt 
Next ws 
+0

あなたの提案はうまくいっていますが、2番目のPTが最初のピボットキャッシュとピボットキャッシュを共有していない場合にのみ役立ちます。私は今、新しいシートにクローン化されたPTを追加しました。コードは最初のFor Each pt In ws.PivotTablesループでそのエラーを返します... – Mike

+0

実際には、このケースでも同様に動作し、以前はset pvtCacheを削除しましたループ? –

+0

ループの前にpvtCacheを削除しても、同じエラーが発生しました。私は少し問題を絞り込むことができました。クローンピボット可能に接続されたスライサーがある場合にのみ問題が発生するようです。 – Mike

0

はPivotCacheを変更するデータセットは、テーブルにデータソースを変換し、テーブル名にピボットテーブルのソースを変更することによって生成される各時間を有するの周り得ました。

関連する問題