2017-08-01 26 views
0

マクロを使用してピボットテーブルを更新しようとしています。これは、毎月テーブルの最後にデータが追加されるためです(最後の行にデータを追加するように更新します)。 .SourceData行で ランタイムエラー1004 - ピボットテーブルを更新するマクロ

Option Explicit 

Sub Pivot() 

Dim shConD As Worksheet 
Dim shPvtTbl As Worksheet 
Dim lr As Long 
Dim rng As Range 

Set shConD = ActiveWorkbook.Sheets("Consolidated_Data") 
Set shPvtTbl = ActiveWorkbook.Sheets("PivotTables") 

lr = shConD.Range("A" & Rows.Count).End(xlUp).Row 
Set rng = shConD.Range("A1:F" & lr) 

With shPvtTbl.PivotTables(3).PivotCache 
    .SourceData = rng.Address(True, True, xlR1C1, True) 'Error appears here 
    .Refresh 
End With 

End Sub 

は、私は、実行時エラー1004アプリケーション定義またはオブジェクト定義のエラーを取得しています。この threadのロジックと続きます chat。先輩に感謝します。

+0

本当にvbaコードが必要ですか?データソースが常に同じ場合、リフレッシュマクロを記録してボタンに設定するだけで済みます。 –

答えて

0

をExcelテーブル(別名ListObject)を開き、下に示すように、ピボットテーブルデータソースの変更でテーブル名を使用します。

テーブルの魔法のおかげで、その時点で、テーブルに新しいデータを追加するたびに自動的に展開されます。ピボットテーブルを更新するたびに、常に新しいデータが自動的に取得されます。再度ピボットテーブルデータソースを変更する必要はありません。

enter image description here

+0

これほど長い年月をかけて、この基本的なコンセプトを知りませんでした。百万人のおかげでありがとう! – KoderM16

0

以下のコード(コードのコメント内の説明)試してみてください:は、Excel 2007以降を使用している場合は、これを実現する最も簡単な方法は、あなたのピボットテーブルのソースデータがあることを確認することです

Option Explicit 

Sub Pivot() 

Dim shConD As Worksheet 
Dim shPvtTbl As Worksheet 
Dim lr As Long 
Dim rng As Range 

' Added PivotTable variables 
Dim PvtTbl As PivotTable 
Dim PvtCache As PivotCache 

Set shConD = ActiveWorkbook.Sheets("Consolidated_Data") 
Set shPvtTbl = ActiveWorkbook.Sheets("PivotTables") 

lr = shConD.Range("A" & shConD.Rows.Count).End(xlUp).Row 
Set rng = shConD.Range("A1:F" & lr) 

' set/update the PivotCache (with latest rng modifications 
Set PvtCache = ActiveWorkbook.PivotCaches.Create(SourceType:=xlDatabase, SourceData:=rng.Address(False, False, xlA1, xlExternal)) 
' for DEBUG Only 
Debug.Print PvtCache.SourceData 

' set the PivotTable object 
Set PvtTbl = shPvtTbl.PivotTables(3) 
' for DEBUG Only 
Debug.Print PvtTbl.Name 

' refresh the PivotTable with the updated PivotCache 
PvtTbl.ChangePivotCache PvtCache 
PvtTbl.RefreshTable 

End Sub 
+0

最後の2行目の 'PvtTbl.ChangePivotCache PvtCache'に次のエラーが発生します。実行時エラー5 - プロシージャコールまたは引数が無効です。ご協力いただきありがとうございます。 – KoderM16

+0

@ KoderM16 3ピボットテーブルがありますか?このコードは私のために働いて、コードを試してください(私は 'Debug'セクションを追加しました) –

+0

ええ、私は3を持っています。正確に同じエラーです。ピボットテーブルは、別のシートにダッシュボードを作成してグラフを作成するときにフィルタリングされます。これは問題に貢献できますか? – KoderM16

関連する問題