Live-Forum - Die aktuellen Beiträge
Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

XLS 2007 und Makro für Pivottabelle

XLS 2007 und Makro für Pivottabelle
09.09.2013 09:10:38
Rainer
Hallo!
Ich habe wiederkehrend die Aufgabe, eine Liste auszuwerten, die jedes mal unterschiedlich viele Zeilen haben kann (Spalten sind IMMER gleich)
Ich dachte hier an ein Makro, das ich per Button aufrufen kann und das mit die Povittabelle _
erzeugt. Als Basis wollte ich mit einer ganz einfachen Datei anfangen, um zu verstehen, wie _
EXCEL hier arbeitet. Dazu habe ich per Rekorder diesen Code aufgezeichnet.

Sub Makro1()
' Makro1 Makro
Range("A1:B11").Select
Sheets.Add
ActiveWorkbook.PivotCaches.Create(SourceType:=xlDatabase, SourceData:= _
"Tabelle1!Z1S1:Z11S2", Version:=xlPivotTableVersion10).CreatePivotTable _
TableDestination:="Tabelle4!Z3S1", TableName:="PivotTable1", _
DefaultVersion:=xlPivotTableVersion10
Sheets("Tabelle4").Select
Cells(3, 1).Select
With ActiveSheet.PivotTables("PivotTable1").PivotFields("Name")
.Orientation = xlRowField
.Position = 1
End With
ActiveSheet.PivotTables("PivotTable1").AddDataField ActiveSheet.PivotTables( _
"PivotTable1").PivotFields("wert"), "Summe von wert", xlSum
ActiveSheet.PivotTables("PivotTable1").PivotFields("Name").Subtotals = Array( _
False, False, False, False, False, False, False, False, False, False, False, False)
End Sub

Danach habe ich dann die Pivottabelle udn das Blatt der Pivottabelle gelöscht und das Makros zum testen nochmal gestartet.
Es kommt dann die Fehlermeldung:
Ungültiger Prozeduraufruf oder ungültiges Argument
an dieser Stelle
ActiveWorkbook.PivotCaches.Create(SourceType:=xlDatabase, SourceData:= _
"Tabelle1!Z1S1:Z11S2", Version:=xlPivotTableVersion10).CreatePivotTable _
TableDestination:="Tabelle4!Z3S1", TableName:="PivotTable1", _
DefaultVersion:=xlPivotTableVersion10
Was ist denn hier falsch bzw wo habe ich meinen Denkfehler?
Danke für Eure Rückmeldungen

4
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: XLS 2007 und Makro für Pivottabelle
09.09.2013 09:24:17
selli
hallo rainer,
kurze zwischenfrage zum verständnis.
wozu ist es nötig die bestehende pivot zu löschen und anschl. wieder neu zu erstellen?
eine aktuallisierung der pivot sollte doch auch den gewünschten effekt bringen.
das wäre so, als würdest du ein auto kaufen, damit fahren, es wieder verkaufen und wenn du wieder fahren möchtest, kaufst du wieder eins usw. (naja, hinkt etwas, aber so in etwa. du weißt, was ich meine)
gruß
selli

AW: XLS 2007 und Makro für Pivottabelle
09.09.2013 09:32:10
Rainer
Hallo!
Du hast natürlich Recht, allerdings ist es so, dass die Datenbasis der Pivottabelle asu Downloads aus SAP entsteht. In einer Datei sollen mehrere Basistabellen in Pivots abgebildet werden. Pro Kunde gibt es eine datei, pro Projekt eine Basistabelle. Das bedeutet auch, dass ich bei einem anderen Kunden (=neue Datei) eine andere Anzahl von Basistabellen haben kann. Damit scheidet die Lösung aus, eine vorbereitete Datei zu haben und lediglich die Pivot zu aktualisieren.
Deswegen dachte ich an eine Datei, in der ich ein Makro zum anlegen der Pivottabelle hinterlege. Wir erzeugen dann die Blätter mit den Basisdaten je nach Bedarf und rufen pro Blatt das Makro auf. In der richtigen Datei sind es bestimmt ca 10 Felder in der Pivottabelle und es ich seht lästig, immer wieder dieselben Formatierungen zu machen z.B. Summenstufen ausschalten.

Anzeige
AW: XLS 2007 und Makro für Pivottabelle
09.09.2013 10:19:53
Rainer
Hallo:
Habe eine Lösung in diesem Stil gefunden
Sub test1()
Range("A1:B11").Select
' Sheets.Add
ActiveWorkbook.PivotCaches.Add(SourceType:=xlDatabase, SourceData:= _
"Tabelle1!Z1S1:Z11S2").CreatePivotTable TableDestination:="", TableName:= _
"PivotTable4"
With ActiveSheet.PivotTables("PivotTable4").PivotFields("Name")
.Orientation = xlRowField
.Position = 1
End With
ActiveSheet.PivotTables("PivotTable4").AddDataField ActiveSheet.PivotTables( _
"PivotTable4").PivotFields("wert"), "Summe von wert", xlSum
ActiveSheet.PivotTables("PivotTable1").PivotFields("Name").Subtotals = Array( _
False, False, False, False, False, False, False, False, False, False, False, False)
End Sub
Trotzdem Danke an alle, die sich das Thema angesehen hatten

Anzeige
AW: XLS 2007 und Makro für Pivottabelle
09.09.2013 10:53:22
fcs
Hallo Rainer,
dein 1. Problem: Name der Zieltabelle
Jedesmal wenn du das Makroneustartest erstellt Excel eine neue Tabelle mit einem anderen Registernamen.
Deshalb muss der Blattname im Code variabel eingebaut werden.
dein 2. Problem: Schreibweise des Bezugs für die SourceData
Der Makrorekorder hat bei dir "Tabelle1!Z1S1:Z13S2" aufgezeichnet.
Ich weiss nicht, ob es hier noch Versions-Unterschiede gibt. Bei mir unter Excel 2010 funktioniert es nur, wenn der Bezug in US-Englisch R1C1 geschrieben wird = "Tabelle1!R1C1:R13C2".
Ich hab dein Makro mal so angepasst, dass es bei mir funktioniert.
Dabei habe ich der besseren Übersicht wegen Objekt-Variablen für die Tabellenblätter und den Pivotbericht gesetzt. Die Ermittlung der letzten Zeile mit Daten hab ich auch beispielhaft integriert.
Gruß
Franz
Sub Make_Pivot_1()
' Pivottabellenbericht erstellen auf Daten im aktiven Tabellenblatt
Dim wks As Worksheet
Dim ZeileLetzte As Long, ZeileTitel As Long
Dim SpalteLetzte As Long, Spalte_1 As Long
Dim wksPivot As Worksheet, pvTab As PivotTable
Dim strSourceData As String
Set wks = ActiveSheet
'Bereich mit Datenquelle für Pivot festlegen/ermitteln
With wks
ZeileTitel = 1 'Zeile mit den Spaltentiteln
Spalte_1 = 1   '1. Spalte der Datenquelle des Pivotbeichts
'Letzte Zeile mit Daten in Spalte "Name" - Spalte A bzw. 1
ZeileLetzte = .Cells(.Rows.Count, 1).End(xlUp).Row
'Letzte Spalte in Titelzeile mit Zelleintrag - kannst du natürlich auch fest vorgeben
SpalteLetzte = .Cells(ZeileTitel, .Columns.Count).End(xlToLeft).Column
'Sourcedata-Text ermitteln - "'" zwingend erforderlich, wenn Blattname _
Leerzeichen oder Sonderzeichen enthält, oder nummerisch ist
'hier sind ggf. Anpassungen erforderlich, wenn in verwendeter Excel-Version _
die Schreibweise des Zellbezugs anders ist.
'Zellbezug in R1C1-Schreibweise
strSourceData = "'" & .Name & "'!" & .Range(.Cells(ZeileTitel, Spalte_1), _
.Cells(ZeileLetzte, SpalteLetzte)).Address(ReferenceStyle:=xlR1C1)
'Zellbezug in localer R1C1-Schreibweise = Z1S1 in DE-Version
'    strSourceData = "'" & .Name & "'!" & .Range(.Cells(ZeileTitel, Spalte_1), _
.Cells(ZeileLetzte, SpalteLetzte)).AddressLocal(ReferenceStyle:=xlR1C1)
'Zellbezug in A1-Schreibweise
'    strSourceData = "'" & .Name & "'!" & .Range(.Cells(ZeileTitel, Spalte_1), _
.Cells(ZeileLetzte, SpalteLetzte)).Address(ReferenceStyle:=xlA1)
'    MsgBox "Pivot-SourceData: " & strSourceData, , "Pivot-Erstellen" 'Testzeile
End With
'neues Blatt für Pivotbericht rechts von Daten-Tabelle einfügen
Sheets.Add After:=wks
Set wksPivot = ActiveSheet
'  wksPivot.Name = wks.Name & "Pivot"
'Neuen Pivotberich ab Zelle A3 einfügen
ActiveWorkbook.PivotCaches.Create(SourceType:=xlDatabase, _
SourceData:=strSourceData, Version:=xlPivotTableVersion10).CreatePivotTable _
TableDestination:="'" & wksPivot.Name & "'!R3C1", TableName:="PivotTable1", _
DefaultVersion:=xlPivotTableVersion10
Set pvTab = wksPivot.PivotTables(1) 'hier Index-Nr. statt Name verwenden!
With pvTab.PivotFields("Name")
.Orientation = xlRowField
.Position = 1
End With
pvTab.AddDataField pvTab.PivotFields("wert"), "Summe von wert", xlSum
pvTab.PivotFields("Name").Subtotals = Array(False, False, False, False, False, _
False, False, False, False, False, False, False)
'objekt-Variablen zurücksetzen
Set wks = Nothing: Set wksPivot = Nothing: Set pvTab = Nothing
End Sub

Anzeige

303 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige