SourceData in Pivotmakro anpassen
Schritt-für-Schritt-Anleitung
Um das SourceData in einem Pivotmakro mit VBA dynamisch anzupassen, kannst Du folgende Schritte befolgen:
-
Bestimme die letzte Zeile: Du musst die letzte Zeile in Deiner Tabelle definieren. Dies kannst Du mit folgendem Code tun:
Dim letzteZeile As Long
letzteZeile = Cells(Rows.Count, 1).End(xlUp).Row
-
Erstelle das PivotCache: Verwende die ActiveWorkbook.PivotCaches.Create-Methode, um das PivotCache zu erstellen. Ersetze die feste Zeilenzahl im SourceData durch die Variable letzteZeile.
ActiveWorkbook.PivotCaches.Create( _
SourceType:=xlDatabase, _
SourceData:="Tabelle2!R1C1:R" & letzteZeile & "C2", _
Version:=xlPivotTableVersion14).CreatePivotTable _
TableDestination:="Tabelle3!R3C1", _
TableName:="PivotTable1", _
DefaultVersion:=xlPivotTableVersion14
-
Fahre mit der PivotTable-Formatierung fort: Nachdem Du das PivotCache erstellt hast, kannst Du die PivotTable nach Deinen Wünschen anpassen.
Häufige Fehler und Lösungen
-
Fehler: Argument nicht optimal
Dieser Fehler tritt häufig auf, wenn Du den SourceData-Bereich nicht korrekt angibst. Stelle sicher, dass Du die Syntax korrekt verwendest: "Tabelle2!R1C1:R" & letzteZeile & "C2".
-
Unterstrich vergessen
Achte darauf, dass Du am Ende einer Zeile in VBA einen Unterstrich (_) setzt, wenn der Code in der nächsten Zeile fortgesetzt wird. Andernfalls führt dies zu einem Syntaxfehler.
Alternative Methoden
Eine alternative Methode besteht darin, die PivotTable-Methode ChangePivotCache zu verwenden, wenn Du bereits eine PivotTable erstellt hast und nur das SourceData aktualisieren möchtest:
Dim PivotTabelle As PivotTable
Set PivotTabelle = Sheets("Tabelle3").PivotTables("PivotTable1")
PivotTabelle.ChangePivotCache ActiveWorkbook.PivotCaches.Create( _
SourceType:=xlDatabase, _
SourceData:="Tabelle2!R1C1:R" & letzteZeile & "C2")
Praktische Beispiele
Hier ist ein vollständiges Beispiel, wie Du das SourceData in einem Pivotmakro anpassen kannst:
Sub PivotTabelleErstellen()
Dim letzteZeile As Long
letzteZeile = Cells(Rows.Count, 1).End(xlUp).Row
ActiveWorkbook.PivotCaches.Create( _
SourceType:=xlDatabase, _
SourceData:="Tabelle2!R1C1:R" & letzteZeile & "C2", _
Version:=xlPivotTableVersion14).CreatePivotTable _
TableDestination:="Tabelle3!R3C1", _
TableName:="PivotTable1", _
DefaultVersion:=xlPivotTableVersion14
With ActiveSheet.PivotTables("PivotTable1").PivotFields("Aussteller/Produkt")
.Orientation = xlRowField
.Position = 1
End With
ActiveSheet.PivotTables("PivotTable1").AddDataField ActiveSheet.PivotTables( _
"PivotTable1").PivotFields("PIs"), "Summe von PIs", xlSum
End Sub
Tipps für Profis
-
Verwende benannte Bereiche: Wenn Du oft mit dynamischen Daten arbeitest, kann es hilfreich sein, benannte Bereiche in Excel zu verwenden. So kannst Du sicherstellen, dass Deine PivotTables immer die neuesten Daten verwenden.
-
Error Handling: Implementiere Fehlerbehandlungsmechanismen in Deinen VBA-Skripten, um Probleme schnell zu identifizieren und zu beheben.
FAQ: Häufige Fragen
1. Wie finde ich die letzte Zeile in einer anderen Spalte?
Du kannst die letzte Zeile in einer anderen Spalte durch Ändern der Spaltennummer in der Cells-Funktion bestimmen, z.B. Cells(Rows.Count, 2).End(xlUp).Row.
2. Kann ich das SourceData auch aus mehreren Tabellen zusammenführen?
Ja, dafür musst Du die Daten zuerst in einer Tabelle konsolidieren oder mit einer UNION-Abfrage in einer Datenbank arbeiten, bevor Du die PivotTable erstellst.