2016-05-24 9 views
0

Ich versuche, einen einfachen Code auszuführen, um eine Pivot-Tabelle mit meinen Daten zu erstellen.Laufzeitfehler 13: Typ stimmt nicht überein

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 

Laufzeitfehler 13, Typ Mismatch wird beim Einstellen von PTCache ausgelöst. Dies ist sehr häufig passiert, wenn ich mit Pivot-Tabellen auf meinem Excel mit VBA arbeite.

+0

Welche Zeile erhalten Sie den Fehler? –

+0

Beim Festlegen von Pivot-Cache, obwohl mein Rng-Objekt den gewünschten Bereich auswählt. –

+0

Versuchen Sie, auf diesen Zeilenhaltepunkt zu setzen und alle Variablen ('xlDatabase',' rng') in Watch zu sehen. – Michael

Antwort

0

Diese Zeichenfolge Set rng = Range("A1", Range("A1").End(xlToRight).End(xlDown)) ist sehr große Bereich "$1:$1048576" eingestellt. Sie können es in Debugger sehen:

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

Vielleicht etwas mit dem Bereich, dass Sie in ActiveWorkbook.PivotCaches.Create verwenden möchten?

Versuchen verwenden auch diese Microsoft's advice über zweite Argument PivotCache.Create:

Wenn als Bereich vorbei, wird es empfohlen, entweder eine Zeichenfolge zu verwenden geben Sie die Arbeitsmappe, Arbeitsblatt und Zellbereich oder die Einrichtung eines Name Bereich und übergeben Sie den Namen als Zeichenfolge. Übergeben eines Bereichs Objekt kann verursachen "type Mismatch" -Fehler unerwartet. Umschalt + * statt

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

Durchführen einer einzigen Methode (dh .CurrentRegion) anstelle von zwei Methoden

+0

Ja, der Bereich, an dem ich arbeite, ist riesig (Zeilen der Größenordnung 100000). Mein Code funktioniert gut für kleinere Bereiche, aber was ist der Auslöser für eine gigantische Reichweite. –

+0

Ich denke, PivotCache.Create auf einem so großen Bereich verwenden kann zu viel Speicher verwenden. – Michael

+0

Übrigens, 100000 Zeilen sind weniger als die ganze Tabelle, wie Sie geschrieben haben. Warum brauchst du alles? – Michael

0

Auch könnte man

Set rng = Range("A1").CurrentRegion 

versuchen, die wie Strg + (dh xlToRight gefolgt von xlDown) ist wahrscheinlich weniger speicherintensiv und löst den Typ-Mismatch-Fehler auf.

+0

Danke für eine effizientere Art der Replikation von Strg + Shift + *. Aber ich bekomme immer noch den 'Mismatch' Fehler für Zeilen> 60000 –

Verwandte Themen