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

Worksheet Pivot Table Update

Forumthread: Worksheet Pivot Table Update

Worksheet Pivot Table Update
16.01.2015 14:40:35
Martin
Hallo Leute,
dieser Event wird bei mir nie ausgeführt, egal ob ich per Datenschnitt oder direkt in der Tabelle die Auswahl ändere - einer eine Idee?
Private Sub Worksheet_PivotTableUpdate(ByVal Target As PivotTable)
Dim wsMain As Worksheet
Dim ws As Worksheet
Dim ptMain As PivotTable
Dim pt As PivotTable
Dim pfMain As PivotField
Dim pf As PivotField
Dim pi As PivotItem
Dim bMI As Boolean
On Error Resume Next
Set wsMain = ActiveSheet
Set ptMain = Target
Application.EnableEvents = False
Application.ScreenUpdating = False
For Each pfMain In ptMain.PageFields
bMI = pfMain.EnableMultiplePageItems
For Each ws In ThisWorkbook.Worksheets
For Each pt In ws.PivotTables
If ws.Name & "_" & pt  wsMain.Name & "_" & ptMain Then
pt.ManualUpdate = True
Set pf = pt.PivotFields(pfMain.Name)
bMI = pfMain.EnableMultiplePageItems
With pf
.ClearAllFilters
Select Case bMI
Case False
.CurrentPage = pfMain.CurrentPage.Value
Case True
.CurrentPage = "(All)"
For Each pi In pfMain.PivotItems
.PivotItems(pi.Name).Visible = pi.Visible
Next pi
.EnableMultiplePageItems = bMI
End Select
End With
bMI = False
Set pf = Nothing
pt.ManualUpdate = False
End If
Next pt
Next ws
Next pfMain
Application.EnableEvents = True
Application.ScreenUpdating = True
End Sub

Anzeige

2
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Worksheet Pivot Table Update
16.01.2015 15:11:11
selli
hallo martin,
nimm mal die zeile
On Error Resume Next
raus.
dann bleibt der code wenigstens in der betreffenden zeile stehen und zieht nicht gnadenlos bis zum ende durch.
dein szenario kann und will sicherlich keiner nachbauen.
gruß
selli

AW: Worksheet Pivot Table Update
16.01.2015 22:34:34
Luschi
Hallo Martin,
selli hat ja schon empfohlen, diese Zeile 'On Error Resume Next' zu deaktivieren.
Diese Zeile: 'For Each ws In ThisWorkbook.Worksheets' ist überflüssig, da es ja ein
Tabellenergeignis für genau die Tabelle ist, in der sich die Pivottabelle ändert -
mit 'Target.Parent' kriegt man raus, um welche Tabelle es sich handelt.
Die oberste For.Schleife 'For Each pfMain In ptMain.PageFields', sorgt dafür, das nur
was passiert, wenn die sich in der ändernde Pivottabelle auch mindestens 1 'PageField'
befindet - wenn nicht, wird sofort zum Schleifenschluß gesprungen - und fertig ist.
Schmeiß diese Schleife also auch weg.
Gruß von Luschi
aus klein-Paris
PS: setze am Anfang der nun 1. Forschleife einen Haltepunkt (F9-Taste) oder benutze den Stop-Befehl.
Dann hält der Debugger an dieser Stelle an und mit der F8-Taste kann man den weiteren Weg zeilenweise nachvollziehen.
Anzeige
;
Anzeige

Infobox / Tutorial

Pivot Table Updates mit VBA in Excel


Schritt-für-Schritt-Anleitung

Um die Funktionalität der PivotTable-Updates in Excel zu verbessern, kannst Du den folgenden VBA-Code in das betreffende Arbeitsblatt einfügen. Dieser Code sorgt dafür, dass beim Update einer PivotTable bestimmte Aktionen ausgeführt werden.

  1. Öffne die Excel-Datei, in der Du die PivotTable nutzen möchtest.
  2. Drücke ALT + F11, um den VBA-Editor zu öffnen.
  3. Suche im Projektfenster nach dem entsprechenden Arbeitsblatt, in dem sich die PivotTable befindet.
  4. Füge den folgenden Code in das Codefenster des Arbeitsblatts ein:
Private Sub Worksheet_PivotTableUpdate(ByVal Target As PivotTable)
    Dim wsMain As Worksheet
    Dim ptMain As PivotTable
    Dim pfMain As PivotField
    Dim bMI As Boolean

    On Error Resume Next ' Fehlerbehandlung aktivieren
    Set wsMain = ActiveSheet
    Set ptMain = Target
    Application.EnableEvents = False
    Application.ScreenUpdating = False

    For Each pfMain In ptMain.PageFields
        bMI = pfMain.EnableMultiplePageItems
        ' Code zur Aktualisierung der PivotTable hier einfügen
    Next pfMain

    Application.EnableEvents = True
    Application.ScreenUpdating = True
End Sub
  1. Speichere die Änderungen und schließe den VBA-Editor.

Mit diesem Code wird der Worksheet_PivotTableUpdate-Event ausgelöst, wenn Du die PivotTable aktualisierst.


Häufige Fehler und Lösungen

  • Fehler: Der Event wird nicht ausgelöst.

    • Lösung: Stelle sicher, dass du den Code im richtigen Arbeitsblatt eingefügt hast und dass die PivotTable tatsächlich aktualisiert wird.
  • Fehler: Unendliche Schleife oder Absturz.

    • Lösung: Überprüfe, ob der Code nicht in einer Endlosschleife gefangen ist, insbesondere durch fehlerhafte Verweise auf andere PivotTables.
  • Empfehlung: Entferne die Zeile On Error Resume Next.

    • Dies hilft dabei, den Code an der problematischen Stelle anzuhalten und die Ursachen leichter zu identifizieren.

Alternative Methoden

Eine alternative Methode zur Aktualisierung von PivotTables besteht darin, die Refresh-Methode zu verwenden. Hier ist ein einfaches Beispiel:

Sub RefreshAllPivotTables()
    Dim pt As PivotTable
    For Each pt In ActiveSheet.PivotTables
        pt.RefreshTable
    Next pt
End Sub

Dieser Code aktualisiert alle PivotTables auf dem aktiven Arbeitsblatt. Du kannst diesen Code in ein allgemeines Modul einfügen.


Praktische Beispiele

Angenommen, Du hast eine PivotTable, die Verkaufsdaten anzeigt. Wenn sich die zugrunde liegenden Daten ändern, möchtest Du sicherstellen, dass die PivotTable automatisch aktualisiert wird. Mit dem oben beschriebenen Worksheet_PivotTableUpdate-Code kannst Du sicherstellen, dass die PivotTable immer die neuesten Informationen anzeigt.


Tipps für Profis

  • Debugging: Setze Haltepunkte (F9-Taste) im Code, um den Ablauf zu überwachen und mögliche Fehlerquellen zu identifizieren.
  • Aktualisierungsereignisse: Nutze Application.EnableEvents klug, um zu verhindern, dass der Code weitere Ereignisse auslöst, während er läuft.
  • Optimierung: Verwende ManualUpdate, um die Performance zu verbessern, wenn Du mehrere PivotTables gleichzeitig aktualisieren musst.

FAQ: Häufige Fragen

1. Wie kann ich die PivotTable automatisch aktualisieren, wenn sich die Quelldaten ändern? Um die PivotTable automatisch zu aktualisieren, kannst Du die Auto_Open-Methode in einem Modul verwenden, um den Refresh-Befehl beim Öffnen der Datei auszuführen.

2. Was ist der Unterschied zwischen Worksheet_PivotTableUpdate und Worksheet_Change? Worksheet_PivotTableUpdate wird nur ausgelöst, wenn eine PivotTable aktualisiert wird, während Worksheet_Change bei jeder Änderung in den Zellen des Arbeitsblatts ausgeführt wird.

3. Kann ich mehrere PivotTables gleichzeitig aktualisieren? Ja, Du kannst eine Schleife verwenden, um alle PivotTables im Arbeitsblatt nacheinander zu aktualisieren, wie im Abschnitt "Alternative Methoden" beschrieben.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige