![]() |
Betrifft: Pivot per VBA Starten.
von: Renner
Geschrieben am: 16.11.2014 19:04:21
Hallo an alle,
ich hebe ein Problem eine Pivot Tabelle per VBA starten zu lassen. Ich habe mir eine Video angeschaut, https://www.youtube.com/watch?v=XYrUxpzFBBI
und einfach nachgemacht. An Sich sind die Befehle nicht schwer, doch bei mir klappt es einfach nicht. Bekomme Laufzeitfehler, beim Tabelle anlegen. :( Ich hatte zufällig das Problem gelöst, doch dann ist mir der Excel abgestürzt :( Wie das immer so ist, komme ich nicht mehr auf die Lösung. Habe alles schon rumprobiert. Vielleicht habt ihr eine Idee.
Private Sub cb_pivot_Click() 'DEKLARIEREN DER OBJEKTE 'Deklariereneiner Pivottabelle Dim pt As PivotTable ' Deklarieren des Zwischenspeicher (Buffer) für die Wertebeireiche Dim cashe As PivotCache 'Deklarieren der Felder in der Pivottabelle Spalten Dim pf As PivotField 'Deklariern der Kategorien der Felder (Werte der Spalten) Dim pi As PivotItem 'ZIELARBEITSBLATT 'Pivot Arbeitsblatt auswehlen Sheets("Pivot").Select ' Bereits bestehende Pivot-Tabellen werden gelöscht With ActiveSheet For Each pt In .PivotTables pt.TableRange2.Delete Next pt End With Sheets("Auftrag").Select 'dynamischer Datenbereich Dim lzp As Integer 'lz=letzteZeile 'letzte Zeile bestimmen With Sheets("Auftrag") 'letzte Zeile bestimmen lzp = Auftrag.Cells(Rows.Count, "A").End(xlUp).Row ' Set cashe = ActiveWorkbook.PivotCaches.Create(xlDatabase, Range(Cells(2, 1), Cells(lzp, 19))) End With ' Neue Pivottabelle mit dynamischer Zeilenanzahl erstellen Sheets("Pivot").Select 'Pivottabelle auf Tabellenblatt erstellen Set pt = ActiveSheet.PivotTables.Add(cashe, Range("A1"), "MeinePivottabelle") End Sub
![]() ![]() |
Betrifft: AW: Pivot per VBA Starten.
von: fcs
Geschrieben am: 16.11.2014 20:18:32
Hallo Dima,
die Ursache für den Fehler ist entweder die Zeile
lzp = Auftrag.Cells(Rows.Count, "A").End(xlUp).Row 'weil es kein Tabelle mit dem Code-Namen Auftrag gibt,
Set pt = ActiveSheet.PivotTables.Add(cashe, Range("A1"), "MeinePivottabelle")da Range("A1") auf das Blatt "Auftrag" verweist und die Pivottab im aktiven Blatt "Pivot" eingefügt werden soll.
With Sheets("Pivot") .Select 'Pivottabelle auf Tabellenblatt erstellen Set pt = .PivotTables.Add(cashe, .Range("A1"), "MeinePivottabelle") End WithDu musst hier also darauf achten,dass komplett auf die anderen Tabellenblätter verwiesen. Dazu ist es hilfreich auch für die Tabellenblätter Objektvariablen zu verwenden.
Private Sub cb_pivot_Click() 'DEKLARIEREN DER OBJEKTE 'Tabellenblatt mit den Quelldaten der Pivottabelle Dim wksData As Worksheet 'Tabellenblatt in dem Pivotbericht erstellt werden soll Dim wksPivot As Worksheet 'Deklariereneiner Pivottabelle Dim pt As PivotTable ' Deklarieren des Zwischenspeicher (Buffer) für die Wertebeireiche Dim cashe As PivotCache 'Deklarieren der Felder in der Pivottabelle Spalten Dim pf As PivotField 'Deklariern der Kategorien der Felder (Werte der Spalten) Dim pi As PivotItem 'Quelltabellenblatt Set wksData = Sheets("Auftrag") 'ZIELARBEITSBLATT Set wksPivot = Sheets("Pivot") 'Pivot Arbeitsblatt auswählen wksPivot.Select ' Bereits bestehende Pivot-Tabellen werden gelöscht With wksPivot For Each pt In .PivotTables pt.TableRange2.Delete Next pt End With wksData.Select 'dynamischer Datenbereich Dim lzp As Integer 'lz=letzteZeile 'letzte Zeile bestimmen With wksData 'letzte Zeile bestimmen lzp = .Cells(.Rows.Count, "A").End(xlUp).Row ' Set cashe = ActiveWorkbook.PivotCaches.Create(xlDatabase, .Range(.Cells(2, 1), .Cells(lzp, _ 19))) End With ' Neue Pivottabelle mit dynamischer Zeilenanzahl erstellen With wksPivot .Select 'Pivottabelle auf Tabellenblatt erstellen Set pt = .PivotTables.Add(cashe, .Range("A1"), "MeinePivottabelle") End With End Sub
![]() |