Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Anzeige
Inhaltsverzeichnis

automatische Aktualisierung von Pivottabellen

Forumthread: automatische Aktualisierung von Pivottabellen

automatische Aktualisierung von Pivottabellen
02.03.2025 12:04:11
Kolja
Hallo zusammen,

ich erstelle momentan ein sehr voluminöses Preiskalkulationstool für einen Getränkehersteller.
Die recht umfangreichen Daten belaufen sich derzeit auf weit über 200 separate Tabellenblätter für die Preiskalkulation jedes einzelnen Produktes sowie natürlich auch der Zusammenfassung der relevanten Ergebnisdaten wie Preise und Preisänderungsdaten.
Bislang funktioniert alles bestens, auch die automatische Generierung eines Inhaltsverzeichnisses in Form einer intelligenten Tabelle mit den entsprechenden Verlinkungen, um schnell das gewünschte Kalkulationsblatt in diesem Blätterwaldzu erreichen.

Die weiteren Auswertungen und Darstellungen der umfangreichen Ergebniszusammenfassung realisiere ich über Pivot-Tabellen. Alles funktioniert bestens.
Allerdings gibt es einen Haken:
Die Pivot's aktualisieren sich ja bekanntermaßen von Haus aus erst einmal nicht von alleine - man muss sie extra aktualisieren.
An sich istz das ja kein Problem, auch einen Aktualisierungsbutton einzufügen ist simpel.
Das Problem liegt leider beim Anwender. In Testläufen hat sich gezeigt, dass immer wieder schlichtweg vergessen wurde, die Pivot's zu aktualisieren.
Um dies zu automatisieren, hatte ich ein refresh ausprobiert, der dies übernimmt:

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
ThisWorkbook.RefreshAll
End Sub

Funktioniert natürlich. Aber hat auch seine Nachteile:
1.) Mit diesem Code beanspruchte Tabellenblätter haben selbstverständlich kein "Rückgängig" mehr.
2.) Wegen dem Datenumfang leiert sich die Rechnerkiste einen Wolf - bei jeder einzelnen Aktion (Zelle wählen etc.). Logisch, Excel spult immer wieder die komplette Arbeitsmappe durch und berechnet wirklich alles immer wieder neu. Folglich leidet die Performance darunter, es dauert eben seine Zeit.

Nun hatte ich mir logischerweise überlegt, den o.g. Refresh-Code nur auf die Blätter zu setzen, die die Pivot's enthalten.
Das passt ja - sobald irgendwas gemacht wird (z.B. Zelle anwählen), dann aktualisierern sich die Pivot's.
Aber auch hier hat es der Anwender hinbekommen, nicht neu aktualisierte Pivot´s auszugeben: Er hatte nur die Blätter mit bereits vorher schon fertig vorausgewählten Pivots aufgerufen und ist ohne jede sonstige Aktion auf Drucken bzw. PDF-Erzeugung gegangen.--> Resultat: Es hatte sich nichts aktualisieren können und es wurden die falschen Preislisten ausgegeben, obwohl die ja berechnet und vorhanden sind - nur eben nicht in den Pivot's aktualisiert. Für das Tagesgeschäft des Getränkeherstellers ist sowas natürlich katastrophalt. Aber dafür macht man ja solche Testläufe.

Um dieses Szenario zu vermeiden, suche ich nach einer adäquaten Lösung anstelle von RefreshAll auf jedem Blatt bei jeder Aktion:

Variante 1:
Kann man das RefreshAll aktivieren durch bloßes Anwählen eines Blättes mit Pivot*s? Sprich: Ich klicke auf den Tabellenreiter des jeweilig betreffenden Blattes und sofort wird das RefreshAll ausgeführt und somit wird schon die Pivot aktualisiert?

Variante 2:
Kann man das Refresh auch nur auf die Pivot´s beschränken, sodass bei jeder Aktion auf allen Tabellenblättern immer nur die Pivot´s aktualisiert werden? (Die Zahlendaten werden ja eh schon immer automatisch berechnet.)

Wer hat hier eine coole zündende Idee?

Beste Grüße
Kolja
Anzeige

7
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: automatische Aktualisierung von Pivottabellen
02.03.2025 12:56:44
RPP63
Moin!
Nimm Variante 1
Das RefreshAll kommt dann ins entsprechende Worksheet_Activate()
Du kannst auch das Workbook_SheetActivate(ByVal Sh As Object) in DieseArbeitsmappe nehmen.
Dort könntest Du die Variable Sh auswerten.
Natürlich nur, wenn es nicht allzu viele Pivot-Sheets sind.

Allerdings:
Wäre es bei dieser Ausgangslage nicht besser, gleich eine Datenbank zu nehmen?

Gruß Ralf
Anzeige
Erläuterung
02.03.2025 13:32:26
RPP63
Wenn Du das Sheet_Activate() nimmst, ginge so etwas:
Private Sub Workbook_SheetActivate(ByVal Sh As Object)

Select Case Sh.Name
Case _
"Pivot1", _
"Pivot2", _
"Pivot3"
ThisWorkbook.RefreshAll
End Select
End Sub


Viel einfacher wäre es, wenn Du 25 Pivot-Sheets, beginnend ab Blatt 76 (von links) hättest:
Private Sub Workbook_SheetActivate(ByVal Sh As Object)

Select Case Sh.Index
Case 75 To 100
ThisWorkbook.RefreshAll
End Select
End Sub
Anzeige
AW: automatische Aktualisierung von Pivottabellen
02.03.2025 14:03:34
Kolja
Besten Dank, manchmal sieht man den Wald vor lauter Bäumen nicht.

Ich habs so gemacht:

Private Sub Worksheet_Activate()
ThisWorkbook.RefreshAll
End Sub

Funktioniert genau so, wie ich es mir vorstelle.
Und ist von der Logik auch passend: Die Pivot´s liegen immer auf separaten Blättern und nie dort, wo die Grundlagen-Daten geändert werden. Ergo sind Datenänderungen immer bereits schon geschehen, bevor die Pivot-Blätter gewählt werden können.
Damit reicht es vollkommen, die Pivot´s zu aktualisieren, sobald die betreffenden Blätter angewählt werden. Und ich lasse so vereinfachend auch gleich sicherheitshalber die ganze Arbeitsmappe neu durchrechnen. Die Rechenzeit fällt beim Tabellenblattwechsel kaum noch auf und ist völlig ok.

Und obendrein gibt es auch kaum noch Einbußen bei "Rückgängig" - lediglich durch das Anwählen der Pivot-Blätter wird der Speicher dann durch die Ausführung des VBA-Befehls gelöscht. Dies kann ich wohl kaum ohne großen Aufwand vermeiden - oder?

Und das andere mit dem gezielten aktualisieren der einzelnen Pivot`s: Lässt sich damit das Problem mit dem Löschen des "Rückgängig"-Speichers umgehen?
---> Wenn ja, dann würd ich das doch noch mal näher beleuchten wollen.
---> Wenn nein, dann bleibe ich gleich bei der obigen Lösung. Bringt ja kaum extra Vorteile.

Insoweit hab schon einmal lieben Dank für die Gedankenstütze - es funzt wie es soll.
Anzeige
Ja, ich weiß
02.03.2025 13:34:42
RPP63
Ja, ich weiß, dass es von 75 bis 100 26 Sheets sind …
Folglich Case 76 To 100
AW: automatische Aktualisierung von Pivottabellen
02.03.2025 13:05:14
Eifeljoi 5
Hallo

Ich würde es einem Button übergeben und mein Code würde dann so aussehen:
Sub Makro1()

Sheets("Tabelle3").PivotTables("PivotTable3").PivotCache.Refresh
Sheets("Tabelle2").PivotTables("PivotTable2").PivotCache.Refresh
End Sub
Anzeige
AW: automatische Aktualisierung von Pivottabellen
02.03.2025 14:09:06
Kolja
Du meinst einen extra Button, den man anklicken muss für die Aktualisierung der Pivot`s?

Der Button hilft nu, wenn der Anwender draufklickt. Vergisst er das, dann aktualisiert sich nix. Der Testlauf des Anwenders hatte gezeigt, dass genau das real passiert und ist auch eher die Regel gewesen. Daher suchte ich eine automatisch ablaufende Routine.

Aber dennoch vielen lieben Dank!
Anzeige
AW: automatische Aktualisierung von Pivottabellen
02.03.2025 22:19:45
Eifeljoi 5
Hallo

Wenn es unbedingt automatsch gehen muss, wo ist das Problem?
Dann setze den Code doch einfach in diese Arbeitsmappe mit Workbook Open.
Dann wird nix vergessen.
Es sei denn du gibst nicht alle Pivots zum Aktualisieren an.
Ganz am Rande bemerkt.
Für sowas nutze ich mittlerweile kein VBA ( keine xksm) mehr, nutze nutze nur noch eine xlsx Datei zum Aktualisieren,
dazu schreibe ich mir eine Skript über den Menüpunkt "Automatisieren".
Anzeige

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Anzeige