2017-06-12 591 views
-1

別のExcel VBAマクロボタンの問題があります。実行時エラー-2147024809(80070057) - ピボットテーブルのフィールド名が無効です

ワークシート上のすべてのピボットを更新するボタンを作成しようとしています(4つあります)。私は前にStackOverflowに行き、うまくいきました。私は私が前に提供し、新しいブックのためにそれを更新されたコードを取ったが、それが機能.ChangePivotCache PvtCacheで以下の失敗:

Sub Button1_Click() 

Dim PvtTbl     As PivotTable 
Dim PvtCache    As PivotCache 
Dim PvtDataRng    As Range 

Set PvtDataRng = Worksheets("OTR_Promo_List_ADV_2017").Range("B2:AU500") 

Set PvtCache = ActiveWorkbook.PivotCaches.Add(xlDatabase, PvtDataRng) 

Set PvtTbl = Worksheets("Desired_Distribution").PivotTables("PivotTable1") 

For Each PvtTbl In Worksheets("Desired_Distribution").PivotTables 

    Set PvtCache = ActiveWorkbook.PivotCaches.Add(xlDatabase, PvtDataRng) 

    With PvtTbl 
     .ChangePivotCache PvtCache 
     .RefreshTable 
    End With 

    Set PvtCache = Nothing 

Next PvtTbl 

End Sub 

唯一の違いは、ブックが変更されたことで、今、私が代わりに4つのピボットをリフレッシュしたいです2の - それは問題になる可能性がありますか?

以下のスクリーンショットの下にワークシートが表示されます。 "OTR_Promo_List_ADV-2017"はデータベースです。ピボットテーブルは、(...つまりPivotTable1、Pivo​​tTable2)私は名前を変更していない、

enter image description here

感謝をデフォルトの命名を持っています!

+0

私はこれを覚えていますが、私のコードは少し異なります。まず、For Each PvtTbl ...ループの前に、 'Set PvtCache'と' Set PvtTbl'の2行は必要ありません。第二に、あなたの 'Range'が動的ではない場合(Range(" B2:AU500 "は静的です)、どうしてこのコードを実行する必要がありますか? –

+0

私は知りません、文字通りコピーして、 – Kevbo

答えて

0

1枚のシートのすべてのピボットテーブルを更新するために使用するコードは、あまりにも複雑です。私はなぜ.ChangePivotCacheを使用したいと思うのか全く分かりません。指定したピボットテーブルのデータソースを変更します。ピボットテーブルを更新するだけであれば、それは完全に不当です。

ピボットテーブルのデータソースとしてExcelテーブルオブジェクトを使用できます。単純なリフレッシュで十分です。また、テーブルを使用したくない場合(明らかにその理由を調べたいかもしれませんが)、ダイナミックレンジ名を使用してピボットソースを定義することができます。どちらの方法でも、ピボットテーブルを更新するだけで、VBAでピボットキャッシュを操作する必要はありません。テーブルやピボットテーブルのソースとしてダイナミックレンジ名で

、あなたがそれらを介して循環させることによってシート上のすべてのピボットテーブルを更新し、これらの線に沿ってのコードでそれらを更新することができます。

Sub RefreshPivotsOnSheet() 
    Dim ws As Worksheet 
    Dim pt As PivotTable 
    Set ws = Worksheets("MySheet") 
    For Each pt In ws.PivotTables 
     pt.RefreshTable 
    Next pt 
End Sub 

編集:どのようにピボットのデータソースとしてExcelテーブルを設定します。ソースデータをCtrl + Tまたは挿入>テーブルを使用してテーブルに変換します。次に、ピボットテーブルデータソースを編集し、作成したばかりのExcelテーブルをポイントします。

+0

ここで提供されているコードを使用しようとしましたが、ランタイムエラー1004の "pt.Refreshtable"セクションで失敗します。 "ピボットテーブルフィールド名が無効です" Excelテーブルオブジェクトを設定する方法がわからないのでデータソース... – Kevbo

+0

ピボットソースのテーブルに関する説明を追加しました。そのコードは私のシナリオでうまく動作しますピボットテーブルのフィールド名は何ですか?エラーは1つが無効であると言うので、 – teylyn

-1

このトピックを閉じることができました。私はどこか別のところに簡単なマクロがあります:

Sub REFRESH() 
' 
' REFRESH Macro 
' 

' 
    ActiveWorkbook.RefreshAll 
End Sub 

と思われました。

ありがとうございます。

+0

私は完全なVBA newbです。 – Kevbo

+0

私は文句を言うつもりはありません...ちょうど助けを求めていたVBAのn00bである人に吐き気をかけることはちょっと役に立たないです。私がコピーしたコードは、以前私がここで尋ねた同様の質問と直接関連していました。 – Kevbo

関連する問題