2016-04-11 11 views
0

私はvbaに複数のピボットのデータソースを変更させることに困惑しています。 私は多くの提案を読んできており、どれも今まで私を助けてくれていません。私は間違っていることを理解していないので、最終的にここで私の質問をします。 ピボットを含む複数のファイルがあり、列が挿入され、ピボットデータソースが変更されているため、変更が必要です。私はこれを正しい範囲に変更したい。vbaを使用してピボットソースを変更すると動作しません

Sub change_pivotsource() 
Dim pt As PivotTable 
Dim pts As PivotTables 
Dim pt_source As String 
Dim ws As Worksheet 
Dim wb As Workbook 

Set wb = ActiveWorkbook 

workbookname = ActiveWorkbook.Name 
sheetname = Left(workbookname, Len(workbookname) - 5) 
pt_source = "'" & sheetname & "'!$A:$T" 


For Each ws In wb.Worksheets 
    For Each PivotTable In ws.PivotTables 
     pt.SourceData = pt_source 
    Next PivotTable 
Next ws 


End Sub 

私は、最終的なデータソースの場所である文字列を持っているワークブック名​​を使用しています:私はこのコードを作成しました。

ブック内のピボットごとにピボットソースとしてpt_sourceを使用するにはどうすればよいですか? 多くの時間が、私はエラー「を持つオブジェクトまたはブロック変数が設定されていません」を取得

編集1:

このコードが実行中に私にエラー7を与える:メモリ不足: し、それが強調表示されます「pt_source = "-行。

Sub change_pivotsource() 
Dim ws As Worksheet 
Dim wb As Workbook 
Dim pt As PivotTable 
Dim sheetname As String 
Dim pt_source As String 
Dim workbookname As String 

workbookname = ThisWorkbook.Name 
sheetname = Left(workbookname, Len(workbookname) - 5) 
pt_source = Sheets(sheetname).Range("$A:$T") 

For Each ws In ThisWorkbook.Worksheets 
     For Each pt In ws.PivotTables 
     pt.ChangePivotCache _ 
     wb.PivotCaches.Create(SourceType:=xlDatabase, _ 
       SourceData:=pt_source) 

     Next pt 
Next ws 
'workbook.save 
End sub 

このコードは、私の質問を解決:ソリューションへ

Sub UpdatePivotCaches() 
' Updates each pivot cache in the current workbook. 
Dim pt As PivotTable  ' Used to loop over each pivot table. 
Dim ws As Worksheet   ' Used to loop over each work sheet. 
Dim sheetname As String 
Dim pt_source As String 
Dim workbookname As String 

workbookname = ThisWorkbook.Name 
sheetname = Left(workbookname, Len(workbookname) - 5) 


    ' Loop over each sheet. 
    For Each ws In ActiveWorkbook.Sheets 

     ' Loop over each pivot table on the sheet. 
     For Each pt In ws.PivotTables 

      ' Update the pivot cache. 
      pt.ChangePivotCache ActiveWorkbook.PivotCaches.Create(xlDatabase, "'" & sheetname & "'!$A:$T", xlPivotTableVersion14) 
     Next 
    Next 
End Sub 

キー(この質問以下のコメントを参照してください)versionパラメータであったかもしれません。 宛先データに感謝

答えて

1

ピボットテーブルはpivot cacheからデータを取得します。変更する必要があるのはこのオブジェクトです。このプロシージャは、現在のワークブック内の各ピボット・テーブルに接続されているキャッシュを置き換えます。

Sub UpdatePivotCaches() 
' Updates each pivot cache in the current workbook. 
Dim pt As PivotTable  ' Used to loop over each pivot table. 
Dim ws As Worksheet   ' Used to loop over each work sheet. 


    ' Loop over each sheet. 
    For Each ws In ActiveWorkbook.Sheets 

     ' Loop over each pivot table on the sheet. 
     For Each pt In ws.PivotTables 

      ' Update the pivot cache. 
      pt.ChangePivotCache ActiveWorkbook.PivotCaches.Create(xlDatabase, "'Sheet1'!C8:D12", xlPivotTableVersion14) 
     Next 
    Next 
End Sub 

私は、新しいデータソース(...'Sheet1'!C8:D12...)をハードコードしましたが、あなたはparameterising範囲のアドレスで、この手順を向上させることができます。

あなたがVBAで立ち往生したことがある場合は、macro recorderを試してみてください。これにより、手動操作がVBAに変換されます。それは非常に便利なツールです。

+0

ありがとうございました。私はマクロレコーダーを試しましたが、ピボットソースを変更するために何も返されませんでした。私はすべて同じピボットキャッシュを使用する複数のピボットを持っています。私は単純にコードを "worksheet.pivottablesの各ピボットテーブルのために変更することはできますか? – DutchArjo

+0

私のコードは引数付きで依頼し続けていますが、今日解決しているウェブサイトはありません。すべてのピボットデータソースをこの範囲に変更したいだけです** ** 'Rustgevers - Values'!$ A:$ T **。しかし、それは達成するのが難しいようです。 – DutchArjo

+0

私の答えはaです –

関連する問題