CurrentPage in Pivot-Tabellen mit VBA effektiv nutzen
Schritt-für-Schritt-Anleitung
Um die Werte aus einer Pivot-Tabelle in ein anderes Tabellenblatt zu kopieren und dabei das Feld CurrentPage
dynamisch zu setzen, kannst du das folgende VBA-Skript verwenden. Es wird angenommen, dass du Excel 2016 oder höher verwendest.
- Öffne den Visual Basic for Applications (VBA) Editor in Excel (Alt + F11).
- Füge ein neues Modul hinzu (Rechtsklick auf "VBAProject" -> Einfügen -> Modul).
- Kopiere den folgenden Code in das Modul:
Sub Einzelbericht()
' Löschen des alten Blattes
Sheets("Einzelbericht").Select
Cells.Select
Selection.Clear
' Schleife für Werte ab B17 (i=17, 2=B)
Dim i As Long
i = 17
Do While Cells(i, 2).Value <> "x"
With Sheets("R 2")
.PivotTables("PivotTable7").PivotFields("Name").CurrentPage = Cells(i, 2).Value
.Rows("1:16").Copy
' Einfügen und anfügen
Sheets("Einzelbericht").Select
Range("A65536").Select
Selection.End(xlUp).Select
ActiveSheet.Paste
Application.CutCopyMode = False
Selection.Copy
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=False
Application.CutCopyMode = False
i = i + 1
End With
Loop
End Sub
- Schließe den VBA-Editor und führe das Makro aus.
Häufige Fehler und Lösungen
-
Fehler: Die Default Eigenschaft des Pivot Items Objektes kann nicht festgelegt werden.
- Lösung: Stelle sicher, dass der Wert in der Zelle, auf den
CurrentPage
gesetzt wird, tatsächlich in der Pivot-Tabelle vorhanden ist.
-
Fehler: Der Kopiervorgang läuft unendlich weiter.
- Lösung: Überprüfe, ob die Bedingung in der
Do While
-Schleife korrekt geschrieben ist. Es sollte Cells(i, 2).Value <> "x"
sein.
-
Fehler: Das Makro beginnt bei der falschen Zelle.
- Lösung: Achte darauf, dass die Variable
i
korrekt auf 17 gesetzt wird und dass die Schleife korrekt durchläuft.
Alternative Methoden
Falls du eine andere Methode bevorzugst, um Werte aus einer Pivot-Tabelle zu extrahieren, könntest du auch eine For
-Schleife verwenden:
Sub AlternativeMethode()
Dim i As Long
For i = 17 To 50 ' Beispiel: bis Zeile 50
If Cells(i, 2).Value = "x" Then Exit For
With Sheets("R 2")
.PivotTables("PivotTable7").PivotFields("Name").CurrentPage = Cells(i, 2).Value
.Rows("1:16").Copy
' Füge hier den Einfügecode ein
End With
Next i
End Sub
Praktische Beispiele
- Beispiel: Wenn in Zelle B17 "Kunde1", in B18 "Kunde2" und so weiter steht, wird das Skript nacheinander die Pivot-Tabelle für jeden Kunden aktualisieren.
- Um die Ergebnisse auf dem Blatt "Einzelbericht" zusammenzufassen, wird der Code bereits entsprechend angepasst.
Tipps für Profis
- Verwende
.Value
beim Zugriff auf Zellen, um sicherzustellen, dass du den tatsächlichen Wert erhältst.
- Setze Fehlerbehandlungsroutinen ein, um potenzielle Laufzeitfehler zu vermeiden, insbesondere bei der Arbeit mit Pivot-Tabellen.
- Dokumentiere deine Makros gut, damit du bei Anpassungen nicht den Überblick verlierst.
FAQ: Häufige Fragen
1. Wie kann ich die Pivot-Tabelle aktualisieren, bevor ich die Werte kopiere?
Aktualisiere die Pivot-Tabelle mit ActiveSheet.PivotTables("PivotTable7").RefreshTable
vor der Schleife.
2. Was mache ich, wenn ich mehrere Pivot-Felder gleichzeitig anpassen möchte?
Du kannst mehrere CurrentPage
-Zuweisungen innerhalb der Schleife hinzufügen, indem du weitere With
-Blöcke für die jeweiligen Pivot-Felder erstellst.
3. Kann ich die Schleife so anpassen, dass sie nur bestimmte Kunden kopiert?
Ja, du kannst Bedingungen hinzufügen, um nur die gewünschten Kunden zu verarbeiten, z.B. If Cells(i, 2).Value Like "Kunde*"
.
4. Wie kann ich die Ergebnisse in ein neues Arbeitsblatt kopieren?
Ändere den Zielbereich in deinem Einfügecode, um sicherzustellen, dass die Daten in das gewünschte Arbeitsblatt eingefügt werden.