2016-05-24 13 views
0

データを使用してピボットテーブルを作成する簡単なコードを実行しようとしています。ランタイムエラー13:タイプの不一致

Sub PTable() 
Dim PT As PivotTable 
Dim PTCache As PivotCache 
Dim rng As Range 
Set rng = Range("A1", Range("A1").End(xlToRight).End(xlDown)) 
rng.Select 

Set PTCache = ActiveWorkbook.PivotCaches.Create(xlDatabase, rng) 
Sheets("New").Activate 
Set PT = ActiveSheet.PivotTables.Add(PTCache, Range("A1"), "My_PT") 
End Sub 

ランタイムエラー13、タイプミスマッチがPTCacheの設定中にスローされます。これは、私がVBAを使用してExcelでPivot Tablesを使用しているときはいつも非常に頻繁に起こっています。

+0

どのラインに間違いがありますか? –

+0

ピボットキャッシュを設定している間、私のrngオブジェクトが希望の範囲を選択します。 –

+0

この行ブレークポイントを設定し、すべての変数( 'xlDatabase'、' rng')を見てみましょう。 – Michael

答えて

0

この文字列Set rng = Range("A1", Range("A1").End(xlToRight).End(xlDown))は非常に巨大な範囲"$1:$1048576"に設定されています。 あなたは、デバッガでそれを見ることができます:

Range("A1", Range("A1").End(xlToRight).End(xlDown)).Address 
=> "$1:$1048576" 

たぶん範囲と間違って何か、あなたはActiveWorkbook.PivotCaches.Createで使用したいということ?範囲として渡すとき

、それは、ブック、ワークシート、およびセル範囲を指定 に文字列を使用するか、または設定のいずれかにお勧めします。

PivotCache.Create第二引数についてこのMicrosoft's adviceを使用しても試してみてください という名前の名前を文字列として渡します。 の範囲オブジェクトを渡す可能性があります 予期せず "型の不一致"エラーが発生します。

+0

はい、私が取り組んでいる範囲は巨大です(100000の位の行)。私のコードは小さな範囲でうまく動作しますが、巨大な範囲の引き金を引っ張っているのは何ですか。 –

+0

私はこのような巨大な範囲でPivotCache.Createを使用すると、あまりにも多くのメモリを使用する可能性があると思います。 – Michael

+0

ところで、あなたが書いたように、100000行はテーブル全体よりも小さいです。なぜあなたはそれをすべて必要としますか? – Michael

0

また、あなたははCtrl + Shift + *代わりに、単一のメソッドを実行

Set rng = Range("A1", Range("A1").End(xlToRight).End(xlDown)) 

(すなわち、.CurrentRegion)の代わりに、すなわち二つの方法(の

のようである

Set rng = Range("A1").CurrentRegion 

を試してみてください、 xlToRightに続いてxlDown)は、メモリーの消費が少なく、タイプの不一致グリッチを解決する可能性があります。

+0

Ctrl + Shift + *をより効率的に複製できました。しかし、私はまだ60000を超える行に対して「不一致」エラーが発生しています –

関連する問題