0

ピボット テーブルと集計情報を含むデータ シートを含むファイルを取得し、これら 2 つのタブを新しいワークブックにコピーし、集計情報から一部の情報を削除してから、ピボット テーブルを更新するプログラムを作成しようとしています。新しいデータ。

VB.NET でピボット テーブルのデータ ソースをプログラムで変更しようとした場合を除いて、すべて正常に動作しています。COM 例外未処理エラーが大量に発生します。私はこのSO 投稿に基づいてコードを作成しています。

マクロレコーダーを使用してVBAで実行すると、正常に動作し、次のコードが得られます(名前付き範囲を使用してみました。ここでの「範囲1」は、関心のある領域を指します。名前付き範囲なしでも試しました) :

    ActiveSheet.PivotTables("PivotTable3").ChangePivotCache ActiveWorkbook. _
    PivotCaches.Create(SourceType:=xlDatabase, SourceData:="Range1", Version _
    :=xlPivotTableVersion12)

これは、SO の投稿が示唆していたこととよく一致しているようです。最近試したコードは次のとおりです。

        Dim pivotTbl As Excel.PivotTable = tableSheet.PivotTables("PivotTable3")

        Dim holdRows As Integer = hold.UsedRange.Rows.Count
        Dim holdCols As Integer = hold.UsedRange.Columns.Count

        Dim pvtRng As Excel.Range = hold.Range("a1", hold.Range("a1").Offset(holdRows - 1, holdCols - 1))

        savebook.Names.Add(Name:="Range1", RefersTo:=pvtRng)
        pivotTbl.ChangePivotCache(savebook.PivotCaches.Create(SourceType:=Excel.XlPivotTableSourceType.xlDatabase, SourceData:="Range1"))

ピボットテーブルのソースタイプに対して外部、データベース、および統合を試し、名前付き範囲を使用する、名前付き範囲を使用しない、SourceDataで範囲を定義するなどを試しました。

疑問がある場合は、MSDN で質の高い時間を過ごすのが最善であることがわかり、ChangePivotCacheページに出くわしました。

ChangePivotCache(Object) メソッドは、ワークシートに格納されたデータをデータ ソースとして使用するピボットテーブルでのみ使用できます。外部データ ソースに接続されているピボットテーブルで ChangePivotCache(Object) メソッドを使用すると、実行時エラーが発生します。

したがって、新しいワークブックに元のワークブックへのリンクがあるという事実が問題の一部であるかどうか疑問に思っています。プログラムと手動の両方でリンクを削除しようとしましたが、もちろん消えません。

すべてについて最も苛立たしいのは、私がマクロ レコーダーから投稿した VBA コードが問題なく機能し、直感的であることです。そのため、なぜ VB.NET が私の一日をそれほど困難にしようとしているのかについて、少し途方に暮れています。 .

どんな助けでも大歓迎です、そしていつものように、たくさんのSOに感謝します

4

1 に答える 1

1

そうですね、コピーしたピボットテーブルの代わりに元のブックのピボットテーブルを参照していたことを除いて、すべてが正しかったです(1つはテーブルシートと呼ばれ、もう1つはtblsheetと呼ばれたので、注意を払い、変数の命名を改善するレッスンです)。したがって、参照が正しいことを確認すれば、上記のコードは夢のように機能するはずです。VB.NETでExcelを自動化するために、まだそこにいる人のためにそれを残しておきます。

于 2012-08-30T15:41:08.697 に答える