Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1020to1024
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Pivot items löschen - performance

Pivot items löschen - performance
10.11.2008 10:01:00
lobby007
Hallo Pivot-Spezis,
ich habe mehrere Pivot-Dateien bei denen aus Platzgründen immer die nicht mehr benötigten Pivot-Items gelöscht werden sollen. (Ca. 1000 Zeilen und 25 Spalten je Datei bei 2 Pivottabellen je Datei).
Das Makro sieht so aus:

Sub Macro1()
ActiveWorkbook.RefreshAll
Dim ws              As Worksheet
Dim pt              As PivotTable
Dim pf              As PivotField
Dim pi              As PivotItem
On Error Resume Next
For Each ws In ActiveWorkbook.Worksheets
For Each pt In ws.PivotTables
pt.RefreshTable
For Each pf In pt.PivotFields
For Each pi In pf.PivotItems
If pi.RecordCount = 0 And _
Not pi.IsCalculated Then
pi.Delete
End If
Next
Next
Next
Next
'Sheets("Summe").Range("G1") = "Pivot-Data: " & Now
' Sheets("Summe").Range("J1") = "Saved: " & Now
ActiveWorkbook.Save
End Sub


Das mit dem Pivot-Items löschen geht aber es ist unglaublich langsam: mehr als 15 Minuten je Excel-Datei! Ich habe 9 von diesen Dateien. Ich mache das alles per vbs im Nachtlauf aber manchmal muß es auch zwischendurch sein.
Wie kann man das Makro beschleunigen? (Screenupdating geht glaube ich nicht?)
Gruß lobby007

13
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Pivot items löschen - performance
10.11.2008 10:19:00
Coach
Hallo lobby007,
am schnellsten ist es,
* die Pivot auf eine leere Quelle zu referenzieren
* dann die Items löschen
* dann ursprüngliche Referenz wiederherstellen
Für das Umreferenzieren gibt es keinen eindeutigen Tip, das hängt sehr stark von der Architektur der Gesamtanwendung ab. Was ist denn die Quelle für die Daten?
Gruß Coach
AW: Pivot items löschen - performance
10.11.2008 10:36:00
lobby007
Hallo Coach,
vielen Dank für die Antwort.
Basis ist eine Access-Tabelle.
Ich mache da viele Selektionen - die müßte ich dann jedesmal neu setzen und aufbauen - leider zuviel Aufwand, das muß auch laufen wenn ich mal in Urlaub bin.
Gruß lobby
Anzeige
AW: Pivot items löschen - performance
10.11.2008 19:46:00
Coach
Hallo lobby,
dann könntest Du z.B. in der MDB eine Abfrage dazwischenschalten, die Deine eigentliche Abfrage mit einem Cross Join mit einer Tabelle kombiniert, in der nur ein Wert enthalten ist.
Z.B.:
SELECT Basis.* FROM Basis, Schalter WHERE (Schalter.Alle=-1);
Procedere:
1. Schalter auf "Aus" setzen (Schalter.Alle=0)
2. Pivot aktualisieren
3. Pivot reduzieren
4. Schalter auf "An" setzen (Schalter.Alle=-1)
5. Pivot aktualisieren
schnell getestet
Laufzeit ohne dieses Procedere bei 3500 "überflüssigen" Items: 232sek
Laufzeit mit: 4sek
Gruß Coach
Anzeige
AW: Pivot items löschen - performance
10.11.2008 20:08:55
lobby007
Hallo Coach,
vielen Dank, aber ich verstehe das nicht so ganz.
Sollen bei Schalter aus keine Sätze in der Tabelle sein?
Wo ist der Sinn der Sache?
Gruß lobby
AW: Pivot items löschen - performance
10.11.2008 20:23:59
Coach
Hallo lobby,
ja, genau das ist der Sinn. Wenn die Pivot leer ist, geht die Reinigung viel schneller.
Gruß Coach
AW: Pivot items löschen - performance
10.11.2008 22:55:00
lobby007
Hi Coach,
auch keine schlechte Idee - hat nur den Nachteil, dass die Selektionen dann alle weg sind weil ja nichts zu finden war.
Man kann überlegen wenigstens die nötigen Selektionen in die Quasi-Leere Tabelle zu legen.
Muß ich mal drüber schlafen, ist natürlich etwas von hinten durch die Brust ins Auge aber der Zweck heiligt ja die Mittel....
Vielen Dank noch mal
Gruß Lobby
Anzeige
AW: Pivot items löschen - performance
10.11.2008 10:19:00
Beate
Hallo,
ab Excel XP ist auch diese Lösung möglich:

Sub DeleteOldPivotItemsWB()
Dim ws As Worksheet, pt As PivotTable
For Each ws In ActiveWorkbook.Worksheets
For Each pt In ws.PivotTables
pt.PivotCache.MissingItemsLimit = xlMissingItemsNone
Next pt
Next ws
Set pt = Nothing
Set ws = Nothing
End Sub


Gruß,
Beate

AW: Pivot items löschen - performance
10.11.2008 10:34:00
lobby007
Hallo Beate,
vielen Dank für die Antwort.
Den Code kenne ich - der ist rasend schnell - aber er hat bei meinen Dateien noch nie irgendetwas bewirkt. Hast Du das schon mal gestestet?
Wir setzen Excel 2003 ein, d.h. eigentlich müßte er funktionieren - tut er aber nicht.
Basis ist eine externe Access-Tabelle, liegt es daran?
Gruß lobby
Anzeige
AW: Pivot items löschen - performance
10.11.2008 10:47:00
yusuf
Hi,
ist zwar banal. Hast es bestimmt auch schon drin aber in deinem Makro ist es nicht zu sehen, deswegen erwaehne ich es mal.
Hast du die Bildschirmaktualisierung waehrend der Bereinigung ausgeschaltet?
Application.Screenupdating
Gruß
Yusuf
AW: Pivot items löschen - performance
10.11.2008 10:50:00
lobby007
Hallo Yusuf
vielen Dank für die Antwort.
Ich hatte das unten in meinem Beitrag schon angesprochen - ich bin mir sicher dass es zwar schneller geht wenn man es einbaut aber der Effekt bleibt dann aus - er muß ja gerade zwischendurch immer updaten um zu sehen was in der Basis aktuell noch vorhanden ist.
Gruß lobby
AW: Pivot items löschen - performance
10.11.2008 10:55:42
yusuf
Hi,
ich hoffe wir reden jetzt nicht aneinander vorbei.
Das ActiveWorkbook.RefreshAll kannst du ja weiterhin ausfuehren.
Probier doch bitte mal folgendes:
Fuege doch bitte nach dem RefreshAll folgenden Code ein
Application.Screenupdating = False
und am ende deines Makros
Application.Screenupdating = True
Gruß
Yusuf
Anzeige
AW: Pivot items löschen - performance
10.11.2008 11:13:06
yusuf
Hi,
tut mir leid, hab jetzt erst beim 2ten mal durchlesen deines ersten Post das Screenupdating in Klammern gesehen...
Erst lesen dann schreiben.
Duerfte ich fragen wie du darauf kommst, dass Screenupdating nicht funktioniert?
Das Screenuodating bezieht sich nur auf die Bildschirmausgabe, deine Daten werden weiterhin ja durch das refreshall aktualisiert.
Es wird dir nur nicht laufend angezeigt sondern erst ganz am ende, wenn du screenupdating wieder auf True setzt.
Gruß
Yusuf
AW: Pivot items löschen - performance
10.11.2008 14:22:00
lobby007
Hallo Yusuf,
leider bringt es schon von der Laufzeit nichts - habe hier auch nach mehr als 45 Minuten für eine Datei abgebrochen (wäre bei 9 Dateien schon ein halber Tag...).
Gruß lobby
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige