Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender

Forumthread: Pivot-Tabelle mit VBA erstellen

Pivot-Tabelle mit VBA erstellen
02.02.2016 10:10:47
kultnoob
Hallo zusammen,
bin derzeit seit mehreren Tagen an einer Aufgabe, zu welcher ich keine Lösung finde.
Innerhalb einer Datei gibt es ein Sheet mit dem Namen "Alle Monate" und ein weiteres Sheet mit dem Namen "Pivot".
Nun ist es mein Ziel, eine Pivot-Tabelle per Makro aus dem Sheet "Alle Monate" zu erstellen. Nach einer Recherche und dem Testen verschiedener Beispiele, komme ich einfach nicht weiter.
Anbei mein Geschnipsel....

Sub test2()
Dim pc As PivotCache, pv As PivotTable, rngSrc As Range, rngDst As Range
Call DelThem
Set rngSrc = ActiveWorkbook.Sheets(1).Range("A1").CurrentRegion
Set rngDst = ActiveWorkbook.Sheets(1).Range("N173431")
Set pc = ActiveWorkbook.PivotCaches.Add(SourceType:=xlDatabase, SourceData:=rngSrc.Address)
Sheets("Pivot").Select
Cells(3, 1).Select
ActiveWorkbook.ShowPivotTableFieldList = True
Set pv = pc.CreatePivotTable(TableDestination:=rngDst, TableName:="PivotTable1")
With ActiveSheet.PivotTables("PivotTable1").PivotFields("Kost")
.Orientation = xlRowField
.Position = 1
End With
With ActiveSheet.PivotTables("PivotTable1").PivotFields("Art")
.Orientation = xlRowField
.Position = 2
End With
With ActiveSheet.PivotTables("PivotTable1").PivotFields("Periode")
.Orientation = xlColumnField
.Position = 1
End With
End Sub
Sub DelThem()
Dim i As Integer
For i = ActiveSheet.PivotTables.Count To 1 Step -1
ActiveSheet.PivotTables(i).TableRange2.EntireRow.Delete
Next
End Sub

Im Punkt

Set pv = pc.CreatePivotTable(TableDestination:=rngDst, TableName:="PivotTable1")

kommt die Fehlermeldung
Laufzeitfehler '1004':
Bezug ist ungültig
und wenn ich es noch einmal starte, kommt diese Fehlermeldung an dem Punkt...
Laufzeitfehler'-2147417848(80010108)':Die Methode 'CreatePivotTable' für das Objekt 'PivotCace' _
_
ist fehlgeschlagen.
In mehreren Posts über eine bekannte Suchmachine wird die Problematik der Erstellung einer _
Pivot-Tabelle angesprochen. Doch leider funktionierte keiner der Beispiele.
Könnt Ihr mir helfen? Kennt sich damit jemand aus?`
Über Hilfe wäre ich sehr dankbar.
Gruß

Anzeige

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

Betreff
Datum
Anwender
Anzeige
AW: Pivot-Tabelle mit VBA erstellen
02.02.2016 10:22:59
Rudi
Hallo,
rngDst muss sich auf Blatt 'Pivot' befinden.
Gruß
Rudi

AW: Pivot-Tabelle mit VBA erstellen
02.02.2016 10:32:57
kultnoob
Hi Rudi,
Ok, habe jetzt den Code angepasst... Aber leider ohne Erfolg... Laufzeitfehler '1004' Bezug ist ungültig...

Sub test2()
Dim pc As PivotCache, pv As PivotTable, rngSrc As Range, rngDst As Range
'    Call DelThem
Set rngSrc = ActiveWorkbook.Sheets(1).Range("A1").CurrentRegion
Set rngDst = ActiveWorkbook.Sheets(2).Range("A3")
Set pc = ActiveWorkbook.PivotCaches.Add(SourceType:=xlDatabase, SourceData:=rngSrc.Address)
Sheets("Pivot").Select
Cells(3, 1).Select
ActiveWorkbook.ShowPivotTableFieldList = True
Set pv = pc.CreatePivotTable(TableDestination:=rngDst, TableName:="PivotTable1")
With ActiveSheet.PivotTables("PivotTable1").PivotFields("Kost")
.Orientation = xlRowField
.Position = 1
End With
With ActiveSheet.PivotTables("PivotTable1").PivotFields("Art")
.Orientation = xlRowField
.Position = 2
End With
With ActiveSheet.PivotTables("PivotTable1").PivotFields("Periode")
.Orientation = xlColumnField
.Position = 1
End With
End Sub
Sub DelThem()
Dim i As Integer
For i = ActiveSheet.PivotTables.Count To 1 Step -1
ActiveSheet.PivotTables(i).TableRange2.EntireRow.Delete
Next
End Sub

Anzeige
AW: Pivot-Tabelle mit VBA erstellen
02.02.2016 10:49:40
Rudi
Hallo,
   Set pc = ActiveWorkbook.PivotCaches.Add(SourceType:=xlDatabase, SourceData:=rngSrc.Address)
Sheets("Pivot").Select
ActiveSheet.Cells.Clear
ActiveWorkbook.ShowPivotTableFieldList = True
Set pv = pc.CreatePivotTable(TableDestination:=rngDst, TableName:="PivotTable1")
Gruß
Rudi

Anzeige
AW: Pivot-Tabelle mit VBA erstellen
03.02.2016 08:41:03
kultnoob
Hi Rudi,
hat leider auch nicht funktioniert. Aber ich habe es dann mit einem anderen Beispiel hinbekommen.
Anbei die Syntax.

Sub CreatePivot()
'Variablen für PivotTable und PivotField zuordnen
Dim objTable As PivotTable, objField As PivotField
'Das Sheet mit den Daten und der ersten Zelle angeben --> im Beispiel A1
ActiveWorkbook.Sheets("Alle Monate").Select
Range("A1").Select
'Auf Basis der Daten in Sheet "Alle Monate" eine Pivot Tabelle erstellen
Set objTable = ActiveWorkbook.Sheets(1).PivotTableWizard
'Innerhalb der Pivot Spaltenbeschriftung und Zeilenbeschriftung angeben
'xlRowField = Zeilenbeschriftung
'xlColumnField = Spaltenbeschriftung
Set objField = objTable.PivotFields("Kost")
objField.Orientation = xlRowField
Set objField = objTable.PivotFields("Art")
objField.Orientation = xlRowField
Set objField = objTable.PivotFields("Periode")
objField.Orientation = xlColumnField
'Werte innerhalb der Pivot-Tabelle festlegen
Set objField = objTable.PivotFields("FTE")
objField.Orientation = xlDataField
objField.Function = xlSum
'Wenn die Pivot mehrmals erstellt wird, muss der Name "PivotTable1" um 1 hochgezählt werden
With ActiveSheet.PivotTables("PivotTable1")
.InGridDropZones = True
.RowAxisLayout xlTabularRow
End With
'Doppelte Werte anzeigen
ActiveSheet.PivotTables("PivotTable1").PivotFields("Kost").RepeatLabels = True
'Teilergebnisse aus der Tabelle entfernen
ActiveSheet.PivotTables("PivotTable1").PivotFields("Kost").Subtotals = Array( _
False, False, False, False, False, False, False, False, False, False, False, False)
'Spaltenbreite automatisch anpassen
ActiveSheet.Range("A:O").AutoFit
End Sub
Eines muss ich aber noch klären. Wenn ich eine Pivot erstelle und diese dann wieder lösche und eine neue erstelle ohne die Datei zu schließen, wird der Name stets um eins hochgezählt.
Jetzt suche ich einfach eine Möglichkeit, den Namen der Pivot-Tabelle vom Anfang einer Variable zuordne und diese dann immer anspreche.
Aber danke für die Hilfe. :)
Gruß

Anzeige
AW: Pivot-Tabelle mit VBA erstellen
03.02.2016 09:43:05
Rudi
Hallo,
With ActiveSheet.PivotTables(1)

sollte auch funktionieren.
Gruß
Rudi

AW: Pivot-Tabelle mit VBA erstellen
03.02.2016 11:06:20
kultnoob
Hi Rudi,
dem Objekt den Namen PivotTables1 zu zuordnen hatte ich schon getestet, aber wenn ich die Pivot das zweite mal erstelle um etwas zu testen, wurde der Name der Pivot auf PivotTable2 geändert und dann konnte das Objekt nicht zugeordnet werden.
Habe nun noch etwas kleines in die Syntax eingebaut und es funktioniert auch bei mehrmaligen erzeugen der Pivot-Tabelle.

Sub CreatePivot()
'Variablen für PivotTable und PivotField zuordnen
Dim objTable As PivotTable, objField As PivotField
'Das Sheet mit den Daten und der ersten Zelle angeben --> im Beispiel A1
ActiveWorkbook.Sheets("Alle Monate").Select
Range("A1").Select
'Auf Basis der Daten in Sheet "Alle Monate" eine Pivot Tabelle erstellen
Set objTable = ActiveWorkbook.Sheets(1).PivotTableWizard
'Pivotnamen auslesen und ändern in FTE_Pivot
With ActiveSheet
If .PivotTables.Count Then
.PivotTables(1).Name = "FTE_Pivot"
End If
End With
'Innerhalb der Pivot Spaltenbeschriftung und Zeilenbeschriftung angeben
'xlRowField = Zeilenbeschriftung
'xlColumnField = Spaltenbeschriftung
Set objField = objTable.PivotFields("Kost")
objField.Orientation = xlRowField
Set objField = objTable.PivotFields("Art")
objField.Orientation = xlRowField
Set objField = objTable.PivotFields("Periode")
objField.Orientation = xlColumnField
'Werte innerhalb der Pivot-Tabelle festlegen
Set objField = objTable.PivotFields("FTE")
objField.Orientation = xlDataField
objField.Function = xlSum
'Wenn die Pivot mehrmals erstellt wird, muss der Name "FTE_Pivot" um 1 hochgezählt werden
With ActiveSheet.PivotTables("FTE_Pivot")
.InGridDropZones = True
.RowAxisLayout xlTabularRow
End With
'Doppelte Werte anzeigen
ActiveSheet.PivotTables("FTE_Pivot").PivotFields("Kost").RepeatLabels = True
'Teilergebnisse aus der Tabelle entfernen
ActiveSheet.PivotTables("FTE_Pivot").PivotFields("Kost").Subtotals = Array( _
False, False, False, False, False, False, False, False, False, False, False, False)
'Spaltenbreite automatisch anpassen
ActiveSheet.Columns("A:O").EntireColumn.AutoFit
End Sub
Aber vielen Dank noch einmal für die Hilfe.
Gruß

Anzeige
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Anzeige
Anzeige

Infobox / Tutorial

Pivot-Tabelle mit VBA erstellen


Schritt-für-Schritt-Anleitung

Um eine Pivot-Tabelle mit VBA zu erstellen, folge diesen Schritten:

  1. Öffne Excel und aktiviere VBA: Drücke ALT + F11, um den VBA-Editor zu öffnen.

  2. Neues Modul erstellen: Rechtsklicke im Projektfenster und wähle Einfügen > Modul.

  3. Code eingeben: Füge den folgenden Code ein:

    Sub CreatePivot()
       Dim objTable As PivotTable, objField As PivotField
       ActiveWorkbook.Sheets("Alle Monate").Select
       Range("A1").Select
       Set objTable = ActiveWorkbook.Sheets(1).PivotTableWizard
    
       Set objField = objTable.PivotFields("Kost")
       objField.Orientation = xlRowField
    
       Set objField = objTable.PivotFields("Art")
       objField.Orientation = xlRowField
    
       Set objField = objTable.PivotFields("Periode")
       objField.Orientation = xlColumnField
    
       Set objField = objTable.PivotFields("FTE")
       objField.Orientation = xlDataField
       objField.Function = xlSum
    End Sub
  4. Makro ausführen: Schließe den VBA-Editor und drücke ALT + F8, um das Makro auszuführen.

  5. Ergebnisse überprüfen: Gehe zum Blatt „Pivot“, um die erstellte Pivot-Tabelle zu sehen.


Häufige Fehler und Lösungen

  • Laufzeitfehler '1004': Bezug ist ungültig:

    • Überprüfe, ob der Zielbereich (rngDst) sich auf dem Blatt „Pivot“ befindet. Ändere den Code entsprechend:
    Set rngDst = ActiveWorkbook.Sheets("Pivot").Range("A3")
  • Laufzeitfehler '-2147417848': Methode 'CreatePivotTable' fehlgeschlagen:

    • Stelle sicher, dass die Pivot-Tabelle auf ein gültiges Ziel zeigt und das Quell-Datenfeld korrekt definiert ist.

Alternative Methoden

Falls du die Pivot-Tabelle nicht über VBA erstellen möchtest, kannst du auch die integrierte Funktion von Excel verwenden:

  1. Markiere die Daten in deinem Arbeitsblatt.
  2. Gehe zu Einfügen > PivotTable.
  3. Wähle den Zielbereich aus und klicke auf OK.
  4. Füge die gewünschten Felder in die Pivot-Table-Felder ein.

Diese Methode ist besonders nützlich, wenn du keinen VBA-Code verwenden möchtest.


Praktische Beispiele

Hier ist ein einfaches Beispiel für die Erstellung einer Pivot-Tabelle:

Sub SimplePivot()
    Dim pc As PivotCache
    Dim pv As PivotTable

    Set pc = ActiveWorkbook.PivotCaches.Create(SourceType:=xlDatabase, SourceData:=ActiveSheet.Range("A1").CurrentRegion)
    Set pv = pc.CreatePivotTable(TableDestination:=Sheets("Pivot").Range("A3"), TableName:="PivotTable1")

    With pv
        .PivotFields("Kost").Orientation = xlRowField
        .PivotFields("Art").Orientation = xlRowField
        .PivotFields("FTE").Orientation = xlDataField
    End With
End Sub

In diesem Beispiel wird eine einfache Pivot-Tabelle erstellt, die die Felder „Kost“ und „Art“ in den Zeilen und „FTE“ als Datenfeld anzeigt.


Tipps für Profis

  • Shortcut für Pivot-Tabelle erstellen: Du kannst die Tastenkombination ALT + N + V verwenden, um schnell eine Pivot-Tabelle zu erstellen.
  • Dynamische Named Ranges: Verwende dynamische benannte Bereiche für deine Quell-Daten, um die Pivot-Tabelle automatisch zu aktualisieren, wenn neue Daten hinzugefügt werden.

FAQ: Häufige Fragen

1. Wie erstelle ich eine Pivot-Tabelle in Excel? Du kannst eine Pivot-Tabelle erstellen, indem du die Daten auswählst und dann auf Einfügen > PivotTable klickst. Alternativ kannst du auch VBA verwenden, um eine Pivot-Tabelle zu erstellen.

2. Was mache ich, wenn der Bezug ungültig ist? Überprüfe, ob der Zielbereich und die Quell-Daten korrekt definiert sind. Achte darauf, dass der Zielbereich sich auf dem richtigen Blatt befindet.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige