Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1472to1476
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
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ß

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

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

317 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige