Dieses Forum nutzt Cookies
Dieses Forum verwendet Cookies, um deine Login-Informationen zu speichern, wenn du registriert bist, und deinen letzten Besuch, wenn du es nicht bist. Cookies sind kleine Textdokumente, die auf deinem Computer gespeichert werden. Die von diesem Forum gesetzten Cookies werden nur auf dieser Website verwendet und stellen kein Sicherheitsrisiko dar. Cookies aus diesem Forum speichern auch die spezifischen Themen, die du gelesen hast und wann du zum letzten Mal gelesen hast. Bitte bestätige, ob du diese Cookies akzeptierst oder ablehnst.

Ein Cookie wird in deinem Browser unabhängig von der Wahl gespeichert, um zu verhindern, dass dir diese Frage erneut gestellt wird. Du kannst deine Cookie-Einstellungen jederzeit über den Link in der Fußzeile ändern.

VBA zum aktualisieren von Pivot
#1
Hallo,

ich habe hier ein Worksheet mit einer Tabelle auf der sehr viele Pivottabellen auf unterschiedlichen Arbeitsblättern beruhen.

Wenn ich Änderungen in der Tabelle vornehme muss ich alle Pivottabellen manuell aktualisieren.

Gibt es eine Möglichkeit über ein VBA alle Pivottabellen gleichzeitig zu aktualisieren?

Am besten bei jedem speichern und neu öffnen der Datei.

Excel 2010
Antworten Top
#2
Moin!
Schaue Dir mal die Workbook.RefreshAll-Methode an.
https://msdn.microsoft.com/de-de/vba/exc...thod-excel

Gruß Ralf
Gib einem Mann einen Fisch und du ernährst ihn für einen Tag. 
Lehre einen Mann zu fischen und du ernährst ihn für sein Leben. (Konfuzius)
Antworten Top
#3
Hi,

ich mache es immer so:

Hinter jedes zu aktualisierende Tabellenblatt:
Code:
Option Explicit

Private Sub Worksheet_Activate()
   Call Pivot_aktualisieren
End Sub

in ein allgemeines Modul:
Code:
Option Explicit

Sub Pivot_aktualisieren()
   '
   ' Pivot_aktualisieren: alle Pivot einer einzelnen Tabelle
   ' (c) 21.09.2011, Ralf
   ' Aufgerufen mit Worksheet_Activate() im betreffenden Tabellenblatt
   '
   Dim pt As PivotTable
   '

      'Alle Pivot-Tabellen eines Tabellenblattes durchlaufen
      For Each pt In ActiveSheet.PivotTables
        
         'Den PivotCache der PT aktualisieren
         pt.PivotCache.Refresh
      Next pt
  
'   Dim i As Integer
'   Dim j As Integer
'   j = ActiveSheet.PivotTables.Count           ' die Nummer der Pivot pro Sheet muß fortlaufend sein ohne Lücken
'
'   For i = 1 To j
'      ActiveSheet.PivotTables("PivotTable" & i).PivotCache.Refresh
'   Next i
  
End Sub

Sub AllePivotTabellenaktualisieren()            ' (c) Thomas Ramel
   'Variablen deklarieren
   Dim ws                        As Worksheet
   Dim pt                        As PivotTable
  
   'Alle Tabellenblätter der Mappe durchlaufen
   For Each ws In ActiveWorkbook.Worksheets
      
      'Alle Pivot-Tabellen eines Tabellenblattes durchlaufen
      For Each pt In ws.PivotTables
        
         'Den PivotCache der PT aktualisieren
         pt.PivotCache.Refresh
      Next pt
   Next ws
End Sub

Public Sub PT_SetSourceNames()
'Setzt überschriebene Namen von Feld-Inhalten wieder
'auf den ursprünglichen Wert zurück
'zuvor ev. die Sub DeleteOldPivotItemsWB() laufen lassen
Dim ws                        As Worksheet
Dim pt                        As PivotTable
Dim pF                        As PivotField
Dim pI                        As PivotItem

    For Each ws In ActiveWorkbook.Worksheets
        For Each pt In ws.PivotTables
            pt.PivotCache.Refresh
            For Each pF In pt.PivotFields
                For Each pI In pF.PivotItems
                    pI.Name = pI.SourceName
                Next pI
            Next pF
        Next pt
    Next ws
End Sub
Antworten Top
#4
Problem ist, dass die Tabelle monatlich gegen eine neue getauscht / aktualisiert wird.

Das Worksheet mit der Tabelle geht also evtl. verloren.

Deshalb sollte die Aktualisierung nicht an das Tabellenblatt gebunden sein.
Antworten Top
#5
Hallo,

Zitat:Problem ist, dass die Tabelle monatlich gegen eine neue getauscht / aktualisiert wird.

Das Worksheet mit der Tabelle geht also evtl. verloren.

Deshalb sollte die Aktualisierung nicht an das Tabellenblatt gebunden sein.


wenn es zu umständlich ist, nach dem Tausch den 3-Zeiler in die neue Tabelle zu kopieren, könntest du auch das per VBA eintragen lassen.

siehe dazu den uralten Beitrag bei Herber
http://www.herber.de/forum/archiv/792to7...uegen.html
Antworten Top
#6
Was spricht gegen mein .RefreshAll im Workbook_Open oder _BeforeSave?
@Wastl:
Da dies extrem in die Sicherheit eingreift,
(Zugriff aufs VBA-Projektobjektmodell vertrauen im Trust-Center)
lehne ich so etwas grundsätzlich ab!
Gib einem Mann einen Fisch und du ernährst ihn für einen Tag. 
Lehre einen Mann zu fischen und du ernährst ihn für sein Leben. (Konfuzius)
Antworten Top
#7
Ich habe jetzt folgendes:

Code:
Option Explicit

Private Sub Aktualisieren()

   Call Pivot_aktualisieren

End Sub
Aber das muss ich ja irgendwie auch anstoßen.
Ich möchte, dass die Funktion automatisch beim öffnen und speichern der Datei aufgerufen wird ohne dass man eine Tastenkombination oder einen Button drücken muss.
Antworten Top
#8
Hi,

dann schreibe halt diesen Befehl
Code:
Call AllePivotTabellenaktualisieren()
in den Workbook_Open()- und Workbook_BeforeSave()-Event von "DieseArbeitsmappe", so wie ich es schon analog für den anderen Code im Worksheet_Activate-Event vorgeschlagen hatte.
Ein bißchen Experimentierfreude hätte ich schon erwartet.
Antworten Top
#9
Fangen wir mal so an:

Ich verstehe, dass ich eine Methode benötige die die Pivottabellen (oder alles) aktualisiert.
Diese Methode wäre wohl Call AllePivotTabellenaktualisieren()

Ich verstehe aber nicht, was der workbook opener ist. Ist das eine eigene VBA? Oder muss ich hier etwas zusätzlich aktivieren?
Wo kann ich diese Events erstellen / aktivieren?
Antworten Top
#10
Hi Max

Gehe im VBA-Editor auf 'DieseArbeitsmappe mit Doppelklick

du siehst meist ein leeres Fenster, in das oben 2 auswahlboxen eingefügt sind.
Stelle die linke auswahl mal auf Workbook und gugg mal was in der rechten alles drin steht

Hilft das weiter?
[-] Folgende(r) 1 Nutzer sagt Danke an Wastl für diesen Beitrag:
  • StrammerMax
Antworten Top


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste