2017-03-21 3 views
0

Ich habe 2 Pivot-Tabellen in meiner Arbeitsmappe und ich habe den folgenden Code, um die Datenquelle dynamisch zu ändern, und die Pivot-Tabellen zu aktualisieren. Der Code wird ordnungsgemäß ausgeführt, während er die erste For Each pt-Schleife durchläuft und die erste Pivot-Tabelle aktualisiert wird. Wenn es jedoch für die zweite Pivot-Tabelle geschleift wird, stürzt der Code bei pt.ChangePitvotCache mit einem Fehler:Laufzeitfehler '5': Ungültiger porcedure Aufruf oder Argument

Run-time error = '5': invalid procedure call or argument"

Hat jemand in der Lage zu helfen, warum dies nicht so schnell, wie ich mehr als 1 Pivot- funktioniert habe Tabelle im Code?

Dim ws As Worksheet 
Dim pvtCache As PivotCache 
Dim pt As PivotTable 
Dim newRange As String 

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

newRange = DataSht.Name & "!" & DataSource.Address(ReferenceStyle:=xlR1C1) 

Set pvtCache = ActiveWorkbook.PivotCaches.Create(SourceType:=xlDatabase, SourceData:=newRange) 

For Each ws In ActiveWorkbook.Worksheets 
    For Each pt In ws.PivotTables 
     pt.ChangePivotCache pvtCache 
     pt.RefreshTable 
    Next pt 
Next ws 

Antwort

0

Sie müssen „Reset“ der pvtCache, nachdem Sie es auf den ersten PivotTable gesetzt.

So müssen Sie Set die pvtCache und "Reset" es innerhalb der For Each pt In ws.PivotTables Schleife.

den Code unten Versuchen:

For Each ws In ActiveWorkbook.Worksheets 
    For Each pt In ws.PivotTables 
     Set pvtCache = ActiveWorkbook.PivotCaches.Create(SourceType:=xlDatabase, SourceData:=newRange) 
     pt.ChangePivotCache pvtCache 
     pt.RefreshTable 
     Set pvtCache = Nothing 
    Next pt 
Next ws 
+0

Danke Shai, Ihr Vorschlag funktioniert, aber nur in dem Fall, in dem der zweite PT keinen PivotCache mit dem ersten teilt. Ich habe jetzt einen geklonten PT auf einem neuen Blatt hinzugefügt und jetzt gibt der Code diesen Fehler auf der ersten For Each pt In ws.PivotTables loop ... – Mike

+0

Eigentlich funktioniert es auch für diesen Fall als auch, hast du den Satz pvtCache zuvor entfernt die Schleife ? –

+0

Ich habe den pvtCache vor der Schleife entfernt und immer noch den gleichen Fehler bekommen. Ich habe es geschafft, das Problem etwas einzuengen. Es scheint, als ob das Problem nur auftritt, wenn ein Slicer mit den geklonten Pivottabellen verbunden ist. – Mike

0

Got um die Pivotcache jedes Mal, wenn die Datenmenge durch die Umwandlung der Datenquelle in eine Tabelle und das Ändern der Quelle der Pivot-Tabellen auf den Tabellennamen erzeugt ändern zu müssen.

Activesheet.ListObjects.Add(xlSrcRange, Range(Cells(1, "A").End(xlDown), Cells(1, "A").End(xlToRight)), , xlYes).Name = "DataTable" 
Verwandte Themen