3

私は次のコードを使用しています:

Sub MakeAPivotTable()

    Dim pt As PivotTable
    Dim cacheOfpt1 As PivotCache 'This is the Source Data
    Dim pf As PivotField
    Dim pi As PivotItem
    Dim LastCol As Long
    Dim LastRow As Long
    Dim PRange As Range


    LastCol = Sheets("Sheet2").Range("A1").SpecialCells(xlCellTypeLastCell).Column
    LastRow = Sheets("Sheet2").Range("A1").SpecialCells(xlCellTypeLastCell).Row
    Set PRange1 = Sheets("Sheet2").Cells(1, 1).Resize(LastRow, LastCol)

    On Error GoTo err_add_Y_next_row

    Sheets("Sheet3").Select
    ActiveSheet.PivotTables("PivotTable1").TableRange2.Clear  'Delete any Pivot Table

    'set the cache of PT
    Sheets("Sheet2").Select
    Set cacheOfpt1 = ActiveWorkbook.PivotCaches.Create(xlDatabase, PRange1)

    'create the pt
    Sheets("Sheet3").Select
    Set pt = ActiveSheet.PivotTables.Add(cacheOfpt1, Range("a1"), "PivotTable1")


    'put the Fields in

    With pt
    'add the Fields
    .PivotFields("CAMPAIGN").Orientation = xlRowField
    '.PivotFields("TAG1").Orientation = xlRowField
    '.PivotFields("TAG2").Orientation = xlRowField
    '.PivotFields("TAG3").Orientation = xlRowField
    .PivotFields("CIRN").Orientation = xlColumnField
    .PivotFields("RUN").Orientation = xlPageField  'Column Filter
    .PivotFields("TVSN").Orientation = xlDataField  'Value Field

    'set the number format
    .DataBodyRange.NumberFormat = "#,##0.00"


    'go to classic View
    .RowAxisLayout xlTabularRow
    End With

err_add_Y_next_row:
MsgBox Err.Number & Err.Description, _
    vbExclamation, "VBAtools.pl"

End Sub

しかし、コードを実行すると、「ピボットテーブル フィールド名が無効です。ピボット テーブル レポートを作成するには、ラベル付きの列を含むリストとして編成されたデータを使用する必要があります。名前を変更している場合」というエラーが表示されます。ピボットテーブル フィールドの新しい名前を入力する必要があります。」

このコードは正常に実行されました。しかし、突然、このエラーが発生し始めました。

誰でも理由を見つけるのを手伝ってくれませんか。

ありがとうございました。

4

1 に答える 1

2

データソースListObjectには の代わりに ("Table")を使用してみてください。Rangeこれらは常にピボットテーブルの有効なデータソースです-このSOの質問を参照してください-OPにはあなたと同じ問題はありませんでしたが、同じ解決策が適用されると思います.

テーブルが常に有効なソースである理由は、テーブルには常に有効なヘッダーがあり、常に少なくとも 1 行のデータがあるためです。

範囲をテーブルに変換したら (そして、「Table1」などと呼びます)、次のように使用できます。

Set cacheOfPt1 = ActiveWorkbook.PivotCaches.Create(xlDatabase, "Table1")

有効なデータ ソースを使用しているキャッシュでは、次のことを正確に行うのに問題はないはずですSet pt

Set pt = ActiveSheet.PivotTables.Add(cacheOfpt1, Range("a1"), "PivotTable1")

また、このセットアップでは、ピボット テーブルを毎回ゼロから完全に再構築する必要性を再検討する必要がある場合があります。「Table1」にデータを追加/削除し、ピボット テーブルを更新するだけ、「Table1」の内容を反映するように自動的に更新されます。

于 2013-09-02T15:50:20.817 に答える