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

Forumthread: VBA Pivottabelle erstellen, Name ansteuern

VBA Pivottabelle erstellen, Name ansteuern
14.06.2017 21:18:27
Dennis24
Hallo,
nach langen Recherchen kann ich jetzt über PivotTableWizard aus einer Datentabelle heraus eine Pivottabelle per VBA erstellen. Allerdings schaffe ich es nicht die Pivot auf einem bestehende Tabellenblatt ("Test") ab Zelle A3 zu erzeugen.
Dies ist Problem 1.
Umgangen habe ich es derzeit, dass ich die Pivot nach dem erstellen in das Tabellenblatt ("Test") verschiebe. Allerdings weist die Syntax PivotTable("PivotTable13") auf und das Tabellenblatt steht mittlerweile bei Tabelle22. Gibt es einen Code, mit dem ich die Pivottabelle oder das Tabellenblatt ansteuern kann? Die Zahlen werden von Excel nach jeder Prozedur neu vergeben.
Vielen Dank im Voraus
Anzeige

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

Betreff
Datum
Anwender
Anzeige
AW: VBA Pivottabelle erstellen, Name ansteuern
15.06.2017 14:06:20
Markus
Hallo Dennis24,
versuch doch mal alles mit dem Rekorder zu machen.
Rekorder starten und dann markieren, Tabelle erstellen direkt in „Test“ auf A3 dann glaub ich hast Du alles was Du willst, wenn ich Dich richtig verstanden habe.
Gruß
Markus
AW: VBA Pivottabelle erstellen, Name ansteuern
15.06.2017 21:44:27
Dennis24
Hallo Markus,
danke für den Hinweis. Hatte ich versucht, aber der Code lief dann beim ausführen auf eine Fehlermeldung. Die Grunddatentabelle hat unterschiedliche Zeilen und das klappt nicht mit dem aufgezeichneten Code. Deshalb hatte ich die Lösung mit dem PivotTableWizard genommen. Das Erstellen der Pivot klappt prima und zuverlässig. Nur kann ich daran nichts mehr per VBA ändern, da ich weder das Tabellenblatt noch die Pivot ansteuern kann.
Hast Du noch ne andere Idee?
Gruß Dennis
Anzeige
AW: VBA Pivottabelle erstellen, Name ansteuern
15.06.2017 22:05:41
Markus
Hallo,
kannst Du die Datei hochladen?
Gruß
Markus
AW: VBA Pivottabelle erstellen, Name ansteuern
15.06.2017 22:55:38
Dennis24
Hallo,
mit der Datei wird schwierig. Ich kann aber die beiden Codes hochladen. Die Grundtabelle ist einfach. Ich brauche Spalte B als Zeilenwert im Pivot und Spalten K und L sollen summiert im Wetrtebereich stehen.
Mit dem Rekorder habe ich golgenden Code aufgezeichnet:
ActiveWorkbook.PivotCaches.Create(SourceType:=xlDatabase, SourceData:= _
"Grunddaten!R1C1:R" & loletzte & "C13", Version:=xlPivotTableVersion15).CreatePivotTable _
TableDestination:="Ergebnis!R3C1", TableName:="PivotTable3", _
DefaultVersion:=xlPivotTableVersion15
Sheets("Ergebnis").Select
Cells(3, 1).Select
With ActiveSheet.PivotTables("PivotTable3").PivotFields("SpalteB")
.Orientation = xlRowField
.Position = 1
End With
ActiveSheet.PivotTables("PivotTable3").AddDataField ActiveSheet.PivotTables( _
"PivotTable3").PivotFields("SpalteK"), "Summe von SpalteK", xlSum
With ActiveSheet.PivotTables("PivotTable3").PivotFields("Summe von SpalteK")
.Caption = "NeuerNameK"
.NumberFormat = "#.##0"
End With
ActiveSheet.PivotTables("PivotTable3").AddDataField ActiveSheet.PivotTables( _
"PivotTable3").PivotFields("SpalteL"), "Summe von SpalteL", xlSum
With ActiveSheet.PivotTables("PivotTable3").PivotFields("Summe von SpalteL")
.Caption = "NeuerNameL"
.NumberFormat = "#.##0"
End With
---------------
loletzte ist eine Variable, die ich gesetzt habe, damit das Pivot auf die unterschiedliche Zeilenzahl der Grundtabelle reagiert. Der Code funktionierte zunächst. Nachdem ich die Datei dann morgens wieder geöffnet hatte, hatte ich eine Fehlermeldung und das Programm stoppte genau zu Beginn diese Codes.
Deshalb hatte ich diesen Code entwickelt:
Dim objTable As PivotTable, objField As PivotField
ActiveWorkbook.Sheets("Grunddaten").Select
Range("A1").Select
Set objTable = Tabelle2.PivotTableWizard
Set objField = objTable.PivotFields("SpalteB")
objField.Orientation = xlRowField
Set objField = objTable.PivotFields("SpalteK")
objField.Orientation = xlDataField
objField.Function = xlSum
objField.Caption = "NeuerNameK"
objField.NumberFormat = "#,##0"
Set objField = objTable.PivotFields("SpalteL")
objField.Orientation = xlDataField
objField.Function = xlSum
objField.Caption = "NeuerNameL"
objField.NumberFormat = "#,##0"
---------------------
Dieser Code erstellt zuverlässig eine Pivottabelle, nur auf jeweils einem neuen Tabellenblatt. Außerdem kann ich keine Gruppierung in der Pivot machen, da ich sie nicht ansteuern kann (ActiveSheet.PivotTables("PivotTable1").PivotSelect) {der Ausdruck in den Anführungstrichen wird von Excel zwingend gebraucht}
Wo liegt mein Fehler?
Gruß Dennis
Anzeige
AW: VBA Pivottabelle erstellen, Name ansteuern
16.06.2017 11:06:02
Markus
Servus,
ohne die Datei ist es schwierig zu testen weil einiges fehlt, Tabellenblatt usw.
Der Name der Pivot ist auch nur Rätselraten.
Die Datei ohne Deine Werte usw. reicht beim hochladen auch.
Gruß
Markus
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige

Infobox / Tutorial

VBA Pivottabelle erstellen und ansteuern


Schritt-für-Schritt-Anleitung

  1. Daten vorbereiten: Stelle sicher, dass deine Grunddatentabelle in Excel gut strukturiert ist. Die Spalten sollten klare Überschriften haben.

  2. VBA-Editor öffnen: Drücke ALT + F11, um den VBA-Editor zu öffnen.

  3. Ein neues Modul erstellen: Klicke mit der rechten Maustaste auf "VBAProject (DeinWorkbookName)" und wähle "Einfügen" > "Modul".

  4. VBA-Code eingeben: Füge den folgenden Code ein, um eine Pivottabelle zu erstellen:

    Sub CreatePivotTable()
       Dim wsData As Worksheet
       Dim wsPivot As Worksheet
       Dim pt As PivotTable
       Dim pc As PivotCache
    
       Set wsData = ThisWorkbook.Sheets("Grunddaten")
       Set wsPivot = ThisWorkbook.Sheets("Test")
    
       ' PivotCache erstellen
       Set pc = ThisWorkbook.PivotCaches.Create(SourceType:=xlDatabase, SourceData:=wsData.Range("A1").CurrentRegion)
    
       ' Pivottabelle erstellen
       Set pt = pc.CreatePivotTable(TableDestination:=wsPivot.Range("A3"), TableName:="PivotTable1")
    
       ' Felder hinzufügen
       With pt
           .PivotFields("SpalteB").Orientation = xlRowField
           .PivotFields("SpalteK").Orientation = xlDataField
           .PivotFields("SpalteL").Orientation = xlDataField
       End With
    End Sub
  5. Makro ausführen: Schließe den VBA-Editor und führe das Makro aus, um die Pivottabelle zu erstellen.


Häufige Fehler und Lösungen

  • Fehler: "PivotTable kann nicht erstellt werden": Überprüfe, ob die Datenquelle korrekt ist und sich keine leeren Zeilen oder Spalten in der Grunddatentabelle befinden.

  • Fehler: "PivotTable nicht gefunden": Stelle sicher, dass du den richtigen Namen der Pivottabelle in deinem Code verwendest. Der Name kann sich ändern, wenn du die Tabelle öffnest und schließt.

  • Fehler: Fehlermeldung beim Ausführen des Codes: Überprüfe, ob die Blätter "Grunddaten" und "Test" exakt so benannt sind, wie im Code angegeben.


Alternative Methoden

  • PivotTableWizard verwenden: Du kannst auch die PivotTableWizard-Methode nutzen, um eine Pivottabelle zu erstellen. Diese ist jedoch etwas komplexer und erfordert eine genaue Definition der Datenquelle.

  • Rekorder nutzen: Der Excel-Rekorder kann eine schnelle Möglichkeit sein, um VBA-Code zu generieren. Beachte jedoch, dass der aufgezeichnete Code oft nicht optimal ist und manuell angepasst werden muss.


Praktische Beispiele

Um eine Pivot Tabelle in Excel zu erstellen, kannst du den folgenden Beispielcode verwenden, der speziell auf deinen Fall zugeschnitten ist:

Sub CreateCustomPivotTable()
    Dim ws As Worksheet
    Dim pt As PivotTable
    Dim pc As PivotCache

    Set ws = ThisWorkbook.Sheets("Test")

    ' Erstelle einen PivotCache
    Set pc = ThisWorkbook.PivotCaches.Create(SourceType:=xlDatabase, SourceData:=ThisWorkbook.Sheets("Grunddaten").Range("A1").CurrentRegion)

    ' Erstelle die Pivottabelle
    Set pt = pc.CreatePivotTable(TableDestination:=ws.Range("A3"), TableName:="PivotTable2")

    ' Füge Felder hinzu
    With pt
        .PivotFields("SpalteB").Orientation = xlRowField
        .AddDataField .PivotFields("SpalteK"), "Summe von SpalteK", xlSum
        .AddDataField .PivotFields("SpalteL"), "Summe von SpalteL", xlSum
    End With
End Sub

Tipps für Profis

  • Namen dynamisch ansteuern: Nutze Variablen, um die Namen von Tabellenblättern und Pivottabellen dynamisch zu steuern. Das macht deinen Code flexibler.

  • Fehlerbehandlung implementieren: Füge Fehlerbehandlungsroutinen in deinen VBA-Code ein, um unerwartete Probleme elegant zu handhaben.

  • PivotTable-Formatierung: Nutze die .TableStyle-Eigenschaft, um deiner Pivottabelle ein ansprechendes Format zu verleihen.


FAQ: Häufige Fragen

1. Wie kann ich die Pivottabelle an einer bestimmten Stelle erstellen? Du kannst den Parameter TableDestination im Code anpassen, um die Position in deinem Arbeitsblatt zu ändern.

2. Was kann ich tun, wenn mein Code nicht funktioniert? Überprüfe alle Blattnamen, Spaltennamen und die Struktur deiner Datenquelle. Oft sind Tippfehler die Ursache für Probleme.

3. Kann ich die Pivottabelle auch automatisch aktualisieren? Ja, du kannst den Code so erweitern, dass die Pivottabelle bei jedem Öffnen der Datei aktualisiert wird, indem du die .RefreshTable-Methode verwendest.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige