Microsoft Excel

Herbers Excel/VBA-Archiv

Pivot-Tabellen

Betrifft: Pivot-Tabellen von: Jan
Geschrieben am: 08.10.2020 13:59:45

Hallo Forum,

ich habe folgendes Problem, bei dem ich hoffe, dass ihr mir helfen könnt:

Und zwar...

ich möchte per VBA aus meiner Hauptdatei eine Pivot-Tabelle in einer zweiten Datei ansprechen.

Soweit auch kein Problem.

Die Pivot-Tabelle allerdings enthält nur 2 Kategorien. Einmal das Jahr 2019 und das Jahr 2020.

Wähle ich manuell zwischen den beiden hin und her, so erscheinen mir Daten für das ausgewählte Jahr.

Die Daten sind für das Jahr 2019 und 2020 innerhalb des selben Bereiches.

Will ich nun aber per VBA, dass erst das Jahr 2020 angeklickt wird und danach das Jahr 2019 kommt folgende Fehlermeldung:

Ein PivotTable-Bericht kann einen anderen PivotTabel-Bericht nicht überlappen.

Das verstehe ich auch soweit, denn es können ja nicht gleichzeitg verschiedene Daten in dem selben Bereich/in den selben Zellen angezeigt werden.

Jedoch will ich das ja auch gar nicht. Dies soll ja nacheinander passieren und nicht gleichzeitig, doch leider kriege ich das nicht hin, weil anscheinend die VBA Ansteuerung der Pivot-Tabelle sagt: "wähle beide Kategorien zusammen aus"


Code:


With ActiveWorkbook.SlicerCaches("Datenschnitt_Jahr")

.SlicerItems("2020").Selected = True

.SlicerItems("2019").Selected = False

.SlicerItems("(Leer)").Selected = False

End With


With ActiveWorkbook.SlicerCaches("Datenschnitt_Jahr")

.SlicerItems("2019").Selected = True

.SlicerItems("2020").Selected = False

.SlicerItems("(Leer)").Selected = False

End With



Vielen Dank schon mal für eure Ideen!

LG


Jan

Betrifft: AW: Pivot-Tabellen
von: fcs
Geschrieben am: 08.10.2020 15:17:31

Hallo Jan,

Grundsätzlich funktioniert dein Makro - ich hab mal etwas einfaches Beispiel nachgebaut.

Die Fehlermeldung kann eigentlich nur auftreten, wenn auf einem Tabellenblatt 2 Pivot-Tabellenberichte vorhanden sind oder angelegt werden sollen.

Wenn sich beim Anlegen des 2. Berichtes oder durch Änderung der Filtereinstellungen die Datenbereiche der beiden Pivot-Berichte überlagern würden, dann wird die von dir zitierte Fehlermeldung angezeigt.

Mich wundert jetzt nur, dass es keinen Fehler gibt, wenn du die Slicerwerte manuell änderst.

Lade, wenn möglich in einer ZIP-DAtei abgespeckte Versionen deiner beiden Dateien hoch.
Datei1 = Datei mit dem Makro, dass die andere Datei öffnet/aktiviert und die Slicer ändert.
Datei2 = Datei mit Beispiel-Daten, Pivottabellenbericht(en) und den SlicerFelden.

LG
Franz

Betrifft: AW: Pivot-Tabellen
von: Yal
Geschrieben am: 08.10.2020 16:13:42

Hallo Jan,

Ganz nach Intuition (nicht geprüft):
zuerst die nicht mehr gewünschten Felder ausschalten (= False), dann die gewünschte einschalten (= True)
Dann wird die Pivottabelle nicht zuerst wachsen (genau da entsteht die Fehlermeldung) und dann schrumpfen, sondern umgekehrt.

Viel Erfolg
Yal

Betrifft: AW: Pivot-Tabellen
von: Jan
Geschrieben am: 09.10.2020 06:53:54

Hallo zusammen!

Der Tipp von Yal hat mir super weitergeholfen!

Der Code sieht nun wie folgt aus:


ActiveSheet.PivotTables("PivotTable1").PivotFields("Name").ClearAllFilters

With ActiveWorkbook.SlicerCaches("Datenschnitt_Jahr")
.SlicerItems("(Leer)").Selected = True
.SlicerItems("2020").Selected = False
.SlicerItems("2019").Selected = False
End With

With ActiveWorkbook.SlicerCaches("Datenschnitt_Jahr")
.SlicerItems("2020").Selected = True
.SlicerItems("2019").Selected = False
.SlicerItems("(Leer)").Selected = False
End With

With ActiveWorkbook.SlicerCaches("Datenschnitt_Jahr")
.SlicerItems("(Leer)").Selected = True
.SlicerItems("2020").Selected = False
.SlicerItems("2019").Selected = False
End With

With ActiveWorkbook.SlicerCaches("Datenschnitt_Jahr")
.SlicerItems("2019").Selected = True
.SlicerItems("2020").Selected = False
.SlicerItems("(Leer)").Selected = False
End With

Ich musste sogesehen die Kategorie "Leer" ansteuern, bevor ich das andere Jahr ansteuere.
Also erst alle Auswahlen wegnehmen und dann die gewünschte vornehmen.


Vielen Dank euch!

VG


Jan

Betrifft: AW: Pivot-Tabellen
von: Yal
Geschrieben am: 09.10.2020 09:30:33

Hallo Jan,

Du hast wahrscheinlich dein Code so weit gekürzt, dass nicht mehr verständlich ist.

Warum funktioniert sowas nicht?:
With ActiveWorkbook.SlicerCaches("Datenschnitt_Jahr")
    .SlicerItems("2019").Selected = False
    .SlicerItems("2020").Selected = False
    .SlicerItems("(Leer)").Selected = False

    .SlicerItems("2019").Selected = True
End With