Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1748to1752
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
(VBA) Erstellung Pivot Tabelle
06.04.2020 14:30:57
gottem11111
Hallo allerseits,
ich möchte gerne eine Pivot in einem neuen Arbeitsblatt (soll "Pivot Auswertung" heißen) über _ VBA erstellen lassen. Per Makrorecorder kam das hier bis jetzt heraus:

Sub Makro2()
' Makro2 Makro
ThisWorkbook.Worksheets.Add.Name = "Pivot Auswertung"
Sheets("Pivot Datenquelle").Select
Range("A1:E1741").Select
ActiveWorkbook.PivotCaches.Create(SourceType:=xlDatabase, SourceData:= _
"Pivot Datenquelle!R1C1:R1741C5", Version:=6).CreatePivotTable _
TableDestination:="Pivot Auswertung!R1C1", TableName:="PivotTable3", _
DefaultVersion:=6
Sheets("Pivot Auswertung").Select
Cells(1, 1).Select
ActiveSheet.Shapes.AddChart2(201, xlColumnClustered).Select
ActiveChart.SetSourceData Source:=Range("'Pivot Auswertung'!$A$1:$C$18")
End Sub

Nun habe ich allerdings 2 Probleme:
1. Ich kann das Ergebnis durch Ausführen des Makros nicht reproduzieren und habe keine Ahnung warum (Laufzeitfehler 5 mit Verweis aus den "ActiveWorkbook.PivotCaches.Create"-Part).
2. Meine Datenquelle variiert von Fall zu Fall bezüglich der letzten Zeile (Spalten sind immer 5). In meinem Beispiel geht es bis Zeile 1741, beim nächsten Mal könnte es sich aber um beispielsweise 2000 Zeilen oder mehr handeln. Wie kann ich die Range variabel angeben?
Ich bin für jeden Hinweis der zur Lösung führt dankbar.
Viele Grüße,
Tom
https://www.herber.de/bbs/user/136450.xlsm

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

Betreff
Datum
Anwender
Anzeige
AW: (VBA) Erstellung Pivot Tabelle
06.04.2020 19:23:10
Regina
Hallo Tom,
der Laufzeitfehler liegt daran, das der Rekorder nicht ganz "sauber" aufzeichnet. Blattnamen, die ein Leerzeichen enthalten müssen in einfache Hochkomata gesetzt werden. Das "Finden" der letzten Zeile für die Erstellung der Pivottabelle und auch des Charts habe ich Dir eingebaut.
Sub Makro2()
' Makro2 Makro
Dim lng_zeile As Long
ThisWorkbook.Worksheets.Add.Name = "Pivot Auswertung"
lng_zeile = Sheets("Pivot Datenquelle").Cells(Rows.Count, 1).End(xlUp).Row
ActiveWorkbook.PivotCaches.Create(SourceType:=xlDatabase, SourceData:= _
"'Pivot Datenquelle'!R1C1:R" & lng_zeile & "C5", Version:=6).CreatePivotTable _
TableDestination:="'Pivot Auswertung'!R1C1", TableName:="PivotTable3", _
DefaultVersion:=6
Sheets("Pivot Auswertung").Select
Cells(1, 1).Select
ActiveSheet.Shapes.AddChart2(201, xlColumnClustered).Select
lng_zeile = ActiveSheet.Cells(Rows.Count, 1).End(xlUp).Row
ActiveChart.SetSourceData Source:=Range("'Pivot Auswertung'!$A$1:$C$" & lng_zeile)
End Sub
Gruß Regina
Anzeige
AW: (VBA) Erstellung Pivot Tabelle
07.04.2020 08:02:35
gottem11111
Hallo Regina,
vielen Dank für die Lösung, in Zukunft weiß ich Bescheid! ;)
Gruß, Tom
AW: (VBA) Erstellung Pivot Tabelle
07.04.2020 08:15:06
gottem11111
Hallo Regina,
noch ein kleiner Zusatz: Wie kann ich dem entstehenden Diagramm gleich einen Namen geben?
Ich möchte schon ein paar Voreinstellungen vornehmen, damit gleich eine passende Auswertung angezeigt wird und der Benutzer dies nicht erst manuell machen muss.
Sobald ich den Code wiederhole, zählt das Diagramm auch hoch (1, 2, 3, etc.). Im Moment müsste ich die Excel immer wieder erst schließen, damit sie wieder bei 1 beginnt.
Gruß, Tom
AW: (VBA) Erstellung Pivot Tabelle
07.04.2020 08:17:50
gottem11111
Hier vielleicht nochmal der aktuelle Code, falls das was hilft:
Sub Makro2()
' Makro2 Makro
Sheets("Pivot Auswertung").Select
Dim lng_zeile As Long
lng_zeile = Sheets("Pivot Datenquelle").Cells(Rows.Count, 1).End(xlUp).Row
ActiveWorkbook.PivotCaches.Create(SourceType:=xlDatabase, SourceData:= _
"'Pivot Datenquelle'!R1C1:R" & lng_zeile & "C5", Version:=6).CreatePivotTable _
TableDestination:="'Pivot Auswertung'!R1C1", TableName:="Pivot Tabelle Auswertung", _
DefaultVersion:=6
Sheets("Pivot Auswertung").Select
Cells(1, 1).Select
ActiveSheet.Shapes.AddChart2(201, xlColumnClustered).Select
lng_zeile = ActiveSheet.Cells(Rows.Count, 1).End(xlUp).Row
ActiveChart.SetSourceData Source:=Range("'Pivot Auswertung'!$A$1:$C$" & lng_zeile)
With ActiveSheet.PivotTables("Pivot Tabelle Auswertung").PivotFields( _
"Vergleich")
.Orientation = xlRowField
.Position = 1
End With
ActiveSheet.PivotTables("Pivot Tabelle Auswertung").AddDataField ActiveSheet. _
PivotTables("Pivot Tabelle Auswertung").PivotFields("Differenz"), _
"Summe von Differenz", xlSum
With ActiveSheet.PivotTables("Pivot Tabelle Auswertung").PivotFields( _
"Summe von Differenz")
.Caption = "Anzahl von Differenz"
.

Function = xlCount
End With
Range("B4").Select
With ActiveSheet.PivotTables("Pivot Tabelle Auswertung").PivotFields( _
"Anzahl von Differenz")
.Calculation = xlPercentOfTotal
.NumberFormat = "0,00%"
End With
ActiveSheet.ChartObjects("Diagramm 1").Activate
ActiveSheet.Shapes("Diagramm 1").IncrementLeft -217.2
ActiveSheet.Shapes("Diagramm 1").IncrementTop 1.8
ActiveChart.SetElement (msoElementDataLabelOutSideEnd)
Range("B2:B4").Select
Selection.Style = "Percent"
Selection.NumberFormat = "0.0%"
Selection.NumberFormat = "0.00%"
Range("A2").Select
End Sub

Anzeige
AW: (VBA) Erstellung Pivot Tabelle
07.04.2020 08:58:09
Regina
... vorab mal eine grundsätzliche Rückfrage:
Wenn es immer die gleiche Datenbasis ist, warum soll die Pivottabelle und das Chart immer neu erstellt werden? Es würde doch ausreichen, die Listenlänge neu zu ermitteln:
Sub Pivot_aktualisieren()
Dim lng_zeile As Long
lng_zeile = Worksheets("Pivot Datenquelle").Cells(Rows.Count, 1).End(xlUp).Row
Worksheets("Pivot Auswertung").PivotTables("PivotTable1").ChangePivotCache ThisWorkbook. _
PivotCaches.Create(SourceType:=xlDatabase, SourceData:= _
"'Pivot Datenquelle'!R1C1:R" & lng_zeile & "C9", Version:=6)
End Sub
Ein vorhandes Chart würde sich dann auch automatisch refreshen.
Gruß Regina
Anzeige

305 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige