Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1392to1396
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
Inhaltsverzeichnis

Pivot per VBA Starten.

Pivot per VBA Starten.
16.11.2014 19:04:21
Renner
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

Vielen Dank
Dima

1
Beitrag zum Forumthread
Beitrag zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Pivot per VBA Starten.
16.11.2014 20:18:32
fcs
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,
oder der Speicherort des Makros unter einem Tabellenblatt-Modul. In diesem Fall können Zeilen mit Range oder Cells auf das falsche Tabellenblatt verweisen, weil bei Code unter einem Tabellenblatt Cells und Range immer auf dieses Blatt verweisen und nicht auf das gerade aktive Tabellenblatt, wie dies in einem allgemeinen der Fall ist. Wenn der Code unter dem Blatt "Auftrag" steht, dann gibt es Probleme in Zeile
    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.
Die Reparatur wäre:
    With Sheets("Pivot")
.Select
'Pivottabelle auf Tabellenblatt erstellen
Set pt = .PivotTables.Add(cashe, .Range("A1"), "MeinePivottabelle")
End With
Du 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.
Dann sieht dein Makro wie folgt aus.
Gruß
Franz
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

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige