Registriert seit: 24.02.2017
Version(en): 365; (2013)
12.01.2018, 09:51
(Dieser Beitrag wurde zuletzt bearbeitet: 12.01.2018, 09:52 von StrammerMax.)
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
Registriert seit: 12.10.2014
Version(en): 365 Insider (32 Bit)
Moin!
Schaue Dir mal die Workbook.RefreshAll-Methode an.
https://msdn.microsoft.com/de-de/vba/exc...thod-excelGruß 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)
Registriert seit: 10.04.2014
Version(en): 2016 + 365
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
Registriert seit: 24.02.2017
Version(en): 365; (2013)
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.
Registriert seit: 04.12.2017
Version(en): 2003-2013
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
Registriert seit: 12.10.2014
Version(en): 365 Insider (32 Bit)
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)
Registriert seit: 24.02.2017
Version(en): 365; (2013)
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.
Registriert seit: 10.04.2014
Version(en): 2016 + 365
12.01.2018, 16:06
(Dieser Beitrag wurde zuletzt bearbeitet: 12.01.2018, 16:06 von Rabe.)
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.
Registriert seit: 24.02.2017
Version(en): 365; (2013)
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?
Registriert seit: 04.12.2017
Version(en): 2003-2013
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:1 Nutzer sagt Danke an Wastl für diesen Beitrag 28
• StrammerMax