2015-07-07 3 views
8

Ich bereite gerade meine Arbeitsmappe vor und habe den folgenden Code verwendet, um meine PivotCaches zu konsolidieren (ich hatte etwa 200 vor der Reinigung).Share PivotCache für PivotTables mit Datenmodell erstellt

Sub changeCache() 
Dim ws As Worksheet 
Dim pt As PivotTable 
Dim pc As PivotCache 
Dim first As Boolean 
On Error Resume Next 

    For Each ws In ActiveWorkbook.Worksheets 
     ws.Activate 
     For Each pt In ActiveSheet.PivotTables 

      If first = False Then 
       Set pc = pt.PivotCache 
       first = True 
      End If 

      pt.CacheIndex = pc.Index 

     Next pt 
    Next ws 

End Sub 

Das hat mein Pivotcache zu 33.

Sub CountCaches() 
    MsgBox ActiveWorkbook.PivotCaches.Count 
End Sub 

Der Grund ist es 33 zählen reduziert und nicht 1 ist, weil ich 32 Pivot-Tabellen haben, die mit dem Data Model gebaut werden.

Meine Frage ist: Kann jemand PivotTables, die mit dem Datenmodell erstellt wurden, ändern, damit alle denselben PivotCache verwenden?

EDIT

Meine sekundäre Frage ist: mehrere Pivot-Tabellen alle auf einem Datenmodell gebaut Do

a) ein einzelnes Datenmodell verweisen; oder

b), die jeweils ihr eigenes Modell haben und daher ‚aufblasen‘ die Excel

EDIT2

Bei der weiteren Erforschung Datei scheint es, dass das Datenmodell ist für Pivot-Tabellen geteilt, die Referenz die gleichen Daten. Dies kann in "Verbindungen" (unter der Registerkarte "Daten" in der Multifunktionsleiste) gesehen werden. In der Theorie sollte dies die Datei nicht "aufblähen", obwohl der Code ActiveWorkbook.PivotCaches.Count jede Pivot-Tabelle zählt, die eine Verbindung teilt und fälschlicherweise (?) Mehrere Caches angibt.

Ich werde jedoch das Kopfgeld offen lassen, falls jemand eine eindeutigere Antwort geben kann.

+2

Lesen Sie die Informationen auf dieser Seite. Ich habe nicht getestet, ob der Cache auf die gleiche Weise aufgebaut ist, aber es könnte Sie näher an eine Antwort bringen. http://datapigtechnologies.com/blog/index.php/cut-the-size-of-your-pivot-table-workbooks-in-half/ – Lumigraphics

+1

Danke für den Link aber kein Glück – Chris

Antwort

2

Wenn ich Ihre Frage richtig verstehe, müssen Sie nur jeden PC auf den ersten einstellen. Also, geben Sie dem PC im ersten Durchlauf einen anderen Namen wie pcfirst, dann setzen Sie für jeden verbleibenden Cache pc = pcfirst. Einige Quellinformationen hier http://www.contextures.com/xlPivot11.html und hier http://www.mrexcel.com/forum/excel-questions/380933-set-multiple-pivot-cache-read-one-cache.html

+1

Danke für die Links, aber leider adressieren sie die Frage nicht direkt. Sie enthalten einige hilfreiche Informationen zum Bereinigen von Pivot-Caches. Es scheint jedoch, dass Pivot-Tabellen, die mit dem Datenmodell erstellt wurden (dh das Kontrollkästchen "Diese Daten dem Datenmodell hinzufügen" beim Erstellen des Pivots) nicht um einen Pivot-Cache erstellt werden – Chris

1

Ich bin noch nicht wirklich an Datenmodell gewöhnt, und ich kann keine zweifelsfreien Erklärungen dazu geben.

Aber ich habe diesen Code ein des Meldesystems zu reinigen ich arbeitete, die Sie weniger PivotCaches bekommen könnte helfen:

Sub Caches_Matches() 
Dim Ws1 As Worksheet, _ 
    Pt1 As PivotTable, _ 
    Ws2 As Worksheet, _ 
    Pt2 As PivotTable, _ 
    PcNb As Integer 

PcNb = ActiveWorkbook.PivotCaches.Count 
MsgBox "PivotCaches.Count = " & PcNb, vbInformation + vbOKOnly, "Before update" 

On Error Resume Next 

    For Each Ws1 In ActiveWorkbook.Worksheets 
     For Each Pt1 In Ws1.PivotTables 
      'fix one pt, loop all of them and set same cache if same source 
      For Each Ws2 In ActiveWorkbook.Worksheets 
       For Each Pt2 In Ws2.PivotTables 
        If Pt1.SourceData <> Pt2.SourceData Or Pt1.PivotCache = Pt2.PivotCache Or Pt1.Name = Pt2.Name Then 
        Else 
         Pt2.CacheIndex = Pt1.PivotCache.Index 
        End If 
       Next Pt2 
      Next Ws2 
     Next Pt1 
    Next Ws1 

MsgBox "PivotCaches.Count = " & ActiveWorkbook.PivotCaches.Count & Chr(10) & _ 
     "Before update = " & PcNb, vbInformation + vbOKOnly, "After update" 
End Sub 
+0

Danke für die Antwort. Leider erzeugt Ihr Code das gleiche Ergebnis wie der Code, der in der ursprünglichen Frage gepostet wurde. Für Pivot-Tabellen, die mit dem Datenmodell erstellt wurden, werden immer noch mehrere Caches gemeldet. – Chris

+0

PivotCaches.Count = 33 Vor Update = 33 – Chris

+0

Ich hoffte, aber ich habe nicht viel über das Thema zu arbeiten, hoffe, Sie werden einen Weg finden! – R3uK