Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1648to1652
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

Pivots auf B aktualisieren, wenn C aufgerufen wird

Pivots auf B aktualisieren, wenn C aufgerufen wird
12.10.2018 10:53:02
Nordwestler
Hallo mal wieder!
Ich kämpfe mit folgenden Problemchen bzw. suche verzweifelt nach Lösungen, die die Aktualisierung beschleunigen:
Ich habe eine Mappe mit einer ziemlich Datenbank, aus der mittels Spezialfilter bei Änderung des Eintrags in Zelle F3 der Startseite "Cockpit" selektierte Daten in andere Blätter (z.B. A1-A5) kopiert werden. Das klappt!
Auf jeder dieser Seiten basiert eine Seite mit diversen Pivottabellen (B1-B5). Das klappt auch!
Aus diesen Pivottabellen wird jeweils eine "Ausgabeseite" bestückt, die mit angehübschten Tabellen und Diagrammen eine Auswertung der Daten bereitstellt (C1-C5). Das klappt ebenfalls!
Im Moment werden diese Pivot-Seiten alle zusammen aktualisiert mit folgendem Code in DieseArbeitsmappe:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim Bereich1 As Range
Dim pt As PivotTable
Set Bereich1 = Range("F3")
If Not Intersect(Target, Bereich1) Is Nothing Then
For Each pt In ActiveSheet.PivotTables
pt.RefreshTable
Next pt
End If
End Sub

Das dauert zwar eine kleine Weile, aber klappt soweit auch. Allerdings werden die PT jedes mal alle aktualisiert, wenn ich das Cockpit erneut aufrufe, auch wenn sich nichts auf der Seite geändert hat. Das kostet überflüssigerweise wertvolle Lebenszeit ;-)
Das zu beschleunigen ist nun mein Problemchen:
1) Kann man es verhindern, dass beim Aufruf des Cockpits wiederum alle PT aktualisiert werden? Wenn ja, wie?
Oder noch besser:
2) weil ja eine Aktualisierung nur notwendig ist, wenn eine Seite auch aufgerufen wird, dass auch nur dann die jeweiligen PT auf B1-B5 aktualisiert werden und nicht alle? Also beim Aufruf von C1 wird nur B1 aktualisiert, bei C2 nur B2 usw.
Ich hoffe, ich habe das einigermaßen verständlich beschrieben und würde mich freuen, wenn mir da jemand auf die Sprünge helfen könnte!
Vielen Dank schon mal im Voraus und viele Grüße aus dem sonnenverwöhnten Ammerland!

6
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Pivots auf B aktualisieren, wenn C aufgerufen wird
13.10.2018 13:32:33
fcs
Hallo Nordwestler,
man kann das Aktualisieren der Pivots das aktivieren der "Cx" -Blätter koppeln.
Wenn alle Pivots auf dem Blatt den gleichen DatenCache/Datenquelle haben, dann werden meines Wissen beim Aktualisieren eines Pivots auch alle anderen Pivots mit der gleichen Datenquelle aktualisiert.
Man muss also nicht in einer Schleife alle Pivots einzeln aktualiiseren, sondern es muss muss nur eine Pivot aktualisiert werden.
Wichtiger erscheint mir hier aber, dass der Berechnungsmodus vorübergehend auf "manuell" gesetzt wird, denn mit jeder Änderung eines Pivotberichts wird bei deinem Makro die Neuberechnung gestart.
Auch die die Bildschirmaktualisierung bremst und gehört während der Makro-Ausführung meistens deaktviert.
Schmeiss dein altes Makro raus und baue meinen Vorschlag ein. Falls die Aktualisierung von nur einem Pivotbericht nicht reicht, dann muss du die als Kommentar noch vorhandene Schleife wieder aktivieren.
Grüße aus dem ebenfalls sonnenverwöhten Unterfranken
Franz
'Ereignismakro unter "DieseArbeitsmappe"
Private Sub Workbook_SheetActivate(ByVal Sh As Object)
Dim shPivot As Worksheet
Dim pt As PivotTable
Dim StatusCalc As Long
Select Case Sh.Name
Case "C1", "C2", "C3", "C4", "C5"
'Makrobremsen lösen
With Application
.ScreenUpdating = False
StatusCalc = .Calculation
.Calculation = xlCalculationManual
.EnableEvents = False
End With
Set shPivot = Me.Worksheets("B" & Right(Sh.Name, 1))
If shPivot.PivotTables.Count > 0 Then shPivot.PivotTables(1).Refresh
'        For Each pt In shPivot.PivotTables
'           pt.RefreshTable
'        Next pt
Sh.Calculate
'Makrobremsen zurücksetzen
With Application
.EnableEvents = True
.ScreenUpdating = True
.Calculation = StatusCalc
End With
MsgBox "Pivots für Blatt """ & Sh.Name & """ sind aktualisiert" 'Testzeile-kann _
wieder gelöscht werden
End Select
End Sub

Anzeige
Korrektur: Pivots auf B aktualisieren, wenn C ....
14.10.2018 06:57:53
fcs
Hallo Nordwestler,
war noch ein kleiner Fehler drin - passierte bei der Umstellung auf Aktualisieren nur eines Pivotberichts.
LG - und jetzt gehts bald zum Wählen.
Bin gespannt welche Koalition am Ende dabei rauskommt, nachdem heute Abend in den TV-Gesprächsrunden noch einmal jeder über jeden herziehen wird.
Franz
'Ereignismakro unter "DieseArbeitsmappe"
Private Sub Workbook_SheetActivate(ByVal Sh As Object)
Dim shPivot As Worksheet
Dim pt As PivotTable
Dim StatusCalc As Long
Select Case Sh.Name
Case "C1", "C2", "C3", "C4", "C5"
'Makrobremsen lösen
With Application
.ScreenUpdating = False
StatusCalc = .Calculation
.Calculation = xlCalculationManual
.EnableEvents = False
End With
Set shPivot = Me.Worksheets("B" & Right(Sh.Name, 1))
If shPivot.PivotTables.Count > 0 Then shPivot.PivotTables(1).RefreshTable
'        For Each pt In shPivot.PivotTables
'           pt.RefreshTable
'        Next pt
Sh.Calculate
'Makrobremsen zurücksetzen
With Application
.EnableEvents = True
.ScreenUpdating = True
.Calculation = StatusCalc
End With
MsgBox "Pivots für Blatt """ & Sh.Name & """ aktualisiert" 'Testzeile
End Select
End Sub

Anzeige
AW: Korrektur: Pivots auf B aktualisieren, wenn C ....
15.10.2018 12:05:45
Nordwestler
Hallo Franz,
zunächst einmal vielen Dank für deinen Lösungsvorschlag!
Allerdings tue ich mich mit der Anpassung der Beispielnamen an die Echtnamen noch etwas schwer oder anders ausgedrückt, ich krieg's nicht hin :-(
Ich bin davon ausgegangen, dass in deiner Codezeile
Case "C1", "C2", "C3", "C4", "C5"
die Beispielnamen wie "C1" durch die tatsächliche Bezeichnung ersetzt werden müssen, also z.B. durch "ABC". Das habe ich zumindest so angepasst.
Aber dann kommt der Punkt, wo der Debugger sich meldet und meckert:
Set shPivot = Me.Worksheets("B" & Right(Sh.Name, 1))
"B" wäre ja der echte Name der PT, also bei mir dann "ABC Pivot". Das habe ich dann umgebaut zu
Set shPivot = Me.Worksheets(Right(Sh.Name,1)& "Pivot", schien mir logisch, aber das war wohl nix und damit bin ich dann mit meinem Latein am Ende.
Kannst du mir bitte verraten, wie ich die Seiten korrekt ansprechen kann?
Anzeige
AW: Korrektur: Pivots auf B aktualisieren, wenn C ....
15.10.2018 14:21:12
fcs
Hallo Nordwestler,
nachdem du die Namen so schön mit Buchstabe und Ziffer in deiner Frage Angegben hattest, hab ich natürlich nach einer kurzen Lösung gesucht.
Wenn sich der Name der Blätter mit den Pivots zusammensetzt aus Name von Blatt mit Förmeln/schöner Darstellung und " Pivot", dann sollte es so funktionieren.
Set shPivot = Me.Worksheets(Sh.Name & " Pivot"
Oder du machst für jedes Blatt eine eigene Case-Zeile um das Blatt mit der Pivot festzulegen:
'Ereignismakro unter "DieseArbeitsmappe"
Private Sub Workbook_SheetActivate(ByVal Sh As Object)
Dim shPivot As Worksheet
Dim pt As PivotTable
Dim StatusCalc As Long
Select Case Sh.Name
Case "C1", "C2", "C3", "C4", "C5"
'Makrobremsen lösen
With Application
.ScreenUpdating = False
StatusCalc = .Calculation
.Calculation = xlCalculationManual
.EnableEvents = False
End With
Select Case Sh.Name
Case "C1": Set shPivot = Me.Worksheets("ABC Pivot")
Case "C2": Set shPivot = Me.Worksheets("XYZ Pivot")
Case "C3": Set shPivot = Me.Worksheets("A3C Pivot")
Case "C4": Set shPivot = Me.Worksheets("A4C Pivot")
Case "C5": Set shPivot = Me.Worksheets("A5C Pivot")
End Select
If shPivot.PivotTables.Count > 0 Then shPivot.PivotTables(1).RefreshTable
Sh.Calculate
'Makrobremsen zurücksetzen
With Application
.EnableEvents = True
.ScreenUpdating = True
.Calculation = StatusCalc
End With
MsgBox "Pivots für Blatt """ & Sh.Name & """ aktualisiert" 'Testzeile
End Select
End Sub
LG
Franz
Anzeige
AW: Korrektur: Pivots auf B aktualisieren, wenn C ....
16.10.2018 08:34:54
Nordwestler
Guten Morgen, Franz, mein Kaiser :-)
Da war ich doch mit der Umstellung
Set shPivot = Me.Worksheets(Right(Sh.Name, 1)) & "Pivot"
gar nicht soweit weg von richtigen Lösung mit
Set shPivot = Me.Worksheets(Sh.Name & " Pivot").
Kannst du mir zur Erweiterung meines kleinen VBA-Horizonts noch verraten, was das Right und die 1 in der ersten Version bedeuteten?
Jetzt funktioniert alles sauber und ohne Zuckungen auf dem Bildschirm, also ganz herzlichen Dank für deine Bemühungen!
Beste Grüße nach Unterfranken!
Reinhard
AW: Korrektur: Pivots auf B aktualisieren, wenn C ....
16.10.2018 13:01:03
fcs
Hallo reinhard,
oft hilft auch unter VBA ein Bick in die VBA-Hilfe (Wort-Markieeren und F1)
Right unter VBA macht das gleiche wie die Tabellenfunktion RECHTS.
Right(Sh.Name, 1)

Nimm vom Text (hier Blattname) die Anzahl Zeichen (hier 1) von Rechts und gib sie als Ergebnis zurück.
In meiner Urversion wurde so aus den Blattnamen "C1", "C2", usw. der Name "B1", "B2" usw.
LG
Franz
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige