Live-Forum - Die aktuellen Beiträge
Datum
Titel
03.05.2024 10:49:02
03.05.2024 10:43:56
03.05.2024 07:38:32
Anzeige
Archiv - Navigation
1928to1932
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

VBA Berichtsverbindungen

VBA Berichtsverbindungen
18.05.2023 13:35:09
Zaky

Hallo Zusammen,

vielleicht könnte mir jemand helfen...

Ich habe 4 Pivot Tabellen mit gleicher Datenquelle. Die Pivots sind miteinander in einem Datensatz durch Berichtsverbindung verbunden.
Die Datenquelle zu 4 Pivots befindet sich im gleichen Excel aber in anderem Arbeitsblatt.
Die Datenquelle erweitert sich mit neuen Werten von Tang zu Tag, deswegen soll die Quelle aktualisiert werden.
Alles wird mit Makro durchgeführt.
Zur Aktualisierung sollen die Berichtsverbindungen rausgenommen werden, ansonsten geht's nicht.

Die Befehle dafür:
1. Schritt: Berichtsverbindungen rausnehmen

ActiveSheet.Shapes.Range(Array("Product")).Select
ActiveWorkbook.SlicerCaches("Datenschnitt_Product").PivotTables.RemovePivotTable (ActiveSheet.PivotTables("PivotTable2"))
ActiveWorkbook.SlicerCaches("Datenschnitt_Product").PivotTables.RemovePivotTable (ActiveSheet.PivotTables("PivotTable3"))
ActiveWorkbook.SlicerCaches("Datenschnitt_Product").PivotTables.RemovePivotTable (ActiveSheet.PivotTables("PivotTable4"))

2. Schritt: Datenquelle mit LastRow und LastColumn aktualisieren

PtLastRow = Sheets("Datenquelle").Range("A" & Application.Rows.Count).End(xlUp).Row
PtLastColumn = Sheets("Datenquelle").Cells(1, Application.Columns.Count).End(xlToLeft).Column

Sheets("Pivots").PivotTables("PivotTable1").ChangePivotCache ActiveWorkbook.PivotCaches.Create(SourceType:=xlDatabase _
, SourceData:=Sheets("Datenquelle").Range(Sheets("Datenquelle").Range("A1"),Sheets("Datenquelle").Cells(PtLastRow, PtLastColumn)), Version:=8)

...dann die gleiche bei "PivotTable2", "PivotTable3" und "PivotTable4" durchführen.

3. Schritt: Berichtsverbindungen zurücksetzen

ActiveSheet.Shapes.Range(Array("Product")).Select
ActiveWorkbook.SlicerCaches("Datenschnitt_Product").PivotTables.AddPivotTable (ActiveSheet.PivotTables("PivotTable2"))
ActiveWorkbook.SlicerCaches("Datenschnitt_Product").PivotTables.AddPivotTable (ActiveSheet.PivotTables("PivotTable3"))
ActiveWorkbook.SlicerCaches("Datenschnitt_Product").PivotTables.AddPivotTable (ActiveSheet.PivotTables("PivotTable4"))

Mein Problem ist, dass nach dem 2. Schritt (Datenquelle aktualisieren) die Auflistung von Pivot2, 3 und 4 aus den Berichtsverbindungen verschwindet.
Also ich kann sie nicht mehr aufnehmen (Haken setzen), weil nur Pivot1 in den Berichtsverbindungen zu finden ist obwohl alle 4 Pivots die gleiche (neue) Datenquelle haben...

Die Makro gibt mir "Anwendungs- oder objektdefinierter Fehler" zurück.

Wenn ich alle oben geschriebenen Schritte manuell (ohne Makro) mache, so funktioniert es fehlerlos und in den Berichtsverbindungen sind alle 4 Pivots zu sehen.

Habt Ihr vielleicht eine Idee, wie ich die Makro ergänzen / korrigieren sollte, um die Berichtsverbindungen zurücksetzen zu können?

Vielen herzlichen Dank,
Zaky

5
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
nachgefragt
18.05.2023 15:55:46
ralf_b
ist die Datenquelle denn keine intelligente Tabelle?


AW: nachgefragt
18.05.2023 17:50:39
Zaky
Nein, die Datenquelle ist keine intelligente Tabelle, weil sie sich wie geschrieben mit neuen Werten von Tang zu Tag erweitert, d.h. jeden Tag kommen 2 neue Spalten dazu.
Und weiß leider auch nicht, mit welchem Makrobefehl ich die Pivot Tabelle aktualisieren könnte, wenn die Datenquelle eine intelligente Tabelle ist.
Sowas habe ich noch nicht gemacht.


AW: VBA Berichtsverbindungen
18.05.2023 15:55:53
Yal
Hallo Zaky,

wenn deine Quelle zu einer Tabelle umgewandelt ist, dann brauchst du nur einmal Strg+Alt+F5 um alle Pivot zu aktualisieren (vorausgesetzt natürlich, dass die Pivot auf diese Quelle aufbauen).

Eine Liste in einer Tabelle umzuwandeln geht über Menü "Einfügen", "Tabelle".

VG
Yal


Anzeige
AW: VBA Berichtsverbindungen
18.05.2023 18:10:36
Zaky
Hallo Yal,

vielen Dank für die Rückmeldung.
Ich habe versucht, die Quelle zu einer Tabelle (Tabelle1) umzuwandeln aber bei der Aktualisierung ist die ganze Pivot Tabelle verschwunden...
Kann aber sein, dass ich den Befehl dazu falsch formuliert habe:

Sheets("Pivots").PivotTables("PivotTable1").ChangePivotCache ActiveWorkbook.PivotCaches.Create(SourceType:=xlDatabase _
, SourceData:=Sheets("Datenquelle").Range("Tabelle1"), Version:=8)

Noch dazu wie geschrieben erweitert sich die Quelle jeden Tag mit 2 Spalten.
Wie kann ich es mit Makro lösen? Tabellenformatierung aufheben + letzteZeile / letzteSpalte definieren + erneut als Tabelle formatieren...?
Das hab ich noch nicht gemacht und weiß nicht wie ich es lösen könnte.

Vielen Dank & VG,
Zaky


Anzeige
AW: VBA Berichtsverbindungen
18.05.2023 18:31:36
Yal
Hallo Zaky,

wenn du eine Spalte rechts einer Tabelle einführst, wird diese als Teil der Tabelle eingenommen. Das kann man unter laufenden Makrorekorder machen. Das Problem ist, dass im Datenbankdesign nicht vorgesehen ist, dass immer wieder einen neuen Feld dazukommt. Idealer wäre jeden Tag 2 neue Zeilen.

Bei 2 neuen Spalten müsste eine Transformation dazwischen Stattfinden ("entpivotieren"). Das müsste mit Power Query stattfinden. So könnten deine Pivottabelle stets auf dieselbe Datenmodell zugreifen und somit "nur" erfrischt werden müssen.

VG
Yal

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige