Live-Forum - Die aktuellen Beiträge
Datum
Titel
17.04.2024 18:57:33
17.04.2024 16:56:58
Anzeige
Archiv - Navigation
1352to1356
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

Excel 2007 Laufzeitfehler 5 bei CreatePivotTable

Excel 2007 Laufzeitfehler 5 bei CreatePivotTable
24.03.2014 15:03:58
Stefan
Hallo liebe Foristen,
wollte mich mit einem Problem an Euch wenden und hoffe, ihr könnt mir weiterhelfen.
Ich habe ein Excel-Arbeitsblatt, auf welchem in einer Pivottabelle Arbeitsergebnisse von acht verschiedenen Projekten dargestellt werden sollen. Auf dem Auswertungs-Arbeitsblatt gibt es für die jeweiligen Projektergebnisse eigene Ziel-Ranges.
Die Crux an der Sache: Die Rohdaten sind in verschiedenen Excel-Files (.xlsm) verteilt. Um das Ganze möglichst flexibel zu halten, muss ich für den Datenzugriff Variablen verwenden (Quellmappe, Zielmappe, Quell-Range, Ziel-Range usw.).
Das folgende Programm hat keinerlei Probleme, aus diesen Variablen einen Pivot-Cache zusammenzuzimmern. Bei der Zeile, in welcher die Pivot-Tabelle erzeugt wird, wirft mir der Compiler den Laufzeitfehler 5:Ungültiger Prozeduraufruf oder ungültiges Argument.
Meine Vermutung ist, dass der Compiler mit dem Parameter TableDestination ein Problem hat, da die Ziel-Range durch eine Variable (zielbereich) ausgedrückt wird. Bei der Cache-Erstellung habe ich aber auch eine Quell-Range in einer Variablen (quellbereich) hinterlegt, ohne einen Fehler auszulösen. Wo zum Henker ist das Problem?! Ich freue mich über Eure Tipps / Einschätzungen, ich bin nämlich am Verzweifeln :)
Hier der Code:

Sub makepivot()
Dim activeWB As Workbook
Dim sourceWB As Workbook
Dim quellblatt As Worksheet
Dim zielblatt As Worksheet
Dim quellbereich As String
Dim zielbereich As String
Dim sPath As String
sPath = "C:\Users\BUS7LR\Desktop\Excel Makros\ASPECSS_2013_1_bis_12.xlsm"
quellbereich = "H2:J16"
zielbereich = "B2:D14"
Set activeWB = ThisWorkbook
Set sourceWB = Application.Workbooks.Open(sPath)
Set quellblatt = sourceWB.Worksheets(1)
Set zielblatt = activeWB.Worksheets(1)
Dim pcache As PivotCache
Dim ptable As PivotTable
Set pcache = ActiveWorkbook.PivotCaches.Create(SourceType:=xlDatabase,
SourceData:=quellblatt.Range(quellbereich))
Set ptable = pcache.CreatePivotTable(TableDestination:=zielblatt.Range(zielbereich), TableName:= _
"PivotTable1", DefaultVersion:=xlPivotTableVersion12)
End Sub
n. B.: bitte nicht an den fehlenden Umbruchszeichen _ stören; im Orignalcode habe ich eine Zeile pro Anweisung.

8
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Excel 2007 Laufzeitfehler 5 bei CreatePivotTable
24.03.2014 17:44:49
fcs
Hallo Stefan,
Beschreibung der Excel-Hilfe zu TableDestination:
Die Zelle in der oberen linken Ecke des Zielbereichs des PivotTable-Berichts (der Bereich im Arbeitsblatt, in dem sich der resultierende PivotTable-Bericht befindet). Der Zielbereich muss sich in einem Arbeitsblatt der Arbeitsmappe befinden, das das PivotCache-Objekt enthält, das durch expression angegeben wurde.
Für den Zielbereich wird also eine einzelne Zelle erwartet.
Entweder du änderst
zielbereich = "B2:D14" in zielbereich = "B2"
oder du probierst es mal mit
TableDestination:=zielblatt.Range(zielbereich).Range("A1")
Gruß
Franz

Anzeige
AW: Excel 2007 Laufzeitfehler 5 bei CreatePivotTable
27.03.2014 09:28:58
Stefan
Hallo Franz,
vielen Dank für Deine Hilfe!
Leider funktionieren beide Varianten nicht; das Programm stürzt stets in der Zeile Set ptable mit Laufzeitfehler 5 ab.
Interessanterweise habe ich, nach dem ich Deinen ersten Vorschlag umgesetzt habe, zunächst einen Laufzeitfehler 1004 bekommen, der sich beim zweiten Durchgang in einen Laufzeitfehler 5 gewandelt hat.
*Kopfkratz* :) Kann es sein, dass mein Compiler in die Knie geht?
Lg Stefan

AW: Excel 2007 Laufzeitfehler 5 bei CreatePivotTable
27.03.2014 14:42:05
fcs
Hallo Stefan,
es gibt noch einen weiteren Fehler in der Zeile oben drüber.
Activeworkbook muss durch activeWB ersetzt werden, damit der PivotCach in der richtigen Datei angelegt wird.
Außerdem sollte geprüft werden, ob im Tabellenblatt der aktiven Datei schon eine Pivot-Bericht vorhanden ist.
Gruß
Franz
Sub makepivot()
Dim activeWB As Workbook
Dim sourceWB As Workbook
Dim quellblatt As Worksheet
Dim zielblatt As Worksheet
Dim quellbereich As String
Dim zielbereich As String
Dim sPath As String
sPath = "C:\Users\BUS7LR\Desktop\Excel Makros\ASPECSS_2013_1_bis_12.xlsm"
quellbereich = "H2:J16"
zielbereich = "B2:D14"
Set activeWB = ThisWorkbook
Set sourceWB = Application.Workbooks.Open(sPath, ReadOnly:=True)
Set quellblatt = sourceWB.Worksheets(1)
Set zielblatt = activeWB.Worksheets(1)
Dim pcache As PivotCache
Dim ptable As PivotTable, ptField As PivotField
Set pcache = activeWB.PivotCaches.Create(SourceType:=xlDatabase, _
SourceData:=quellblatt.Range(quellbereich))
If zielblatt.PivotTables.Count >= 1 Then
MsgBox "Eine Pivottabelle existiert bereits, Makoro wird abgebrochen!"
sourceWB.Close savechanges:=False
Else
Set ptable = pcache.CreatePivotTable( _
TableDestination:=zielblatt.Range(zielbereich).Range("A1"), _
TableName:="PivotTable1", DefaultVersion:=xlPivotTableVersion12)
' ####   Pivotfelder einfügen - zum Testen #####
Set ptField = ptable.PivotFields(2)
ptField.Orientation = xlRowField
Set ptField = ptable.PivotFields(1)
ptField.Orientation = xlRowField
Set ptField = ptable.PivotFields(3)
ptField.Orientation = xlDataField
ptable.DataFields(1).Function = xlSum
ptable.DataFields(1).Name = "Summe " & ptable.PivotFields(3).Name
sourceWB.Close savechanges:=False
activeWB.Activate
End If
End Sub

Anzeige
AW: Excel 2007 Laufzeitfehler 5 bei CreatePivotTable
27.03.2014 15:39:28
Stefan
Mensch, Franz :)
Du bist ein Genie!!! Es funktioniert. Tausend Dank! Jetzt machts wieder Spaß, mit VBA zu arbeiten.
Wenn ich dich richtig verstanden habe, sollte ich in die Makro noch eine Anweisung zum löschen existierender Pivottabellen einbauen; aber das sollte ich allein hinbekommen.
Nochmals vielen Dank und ein großes Lob für Euer Forum!
Viele Grüße aus Stuttgart,
Stefan

AW: Excel 2007 Laufzeitfehler 5 bei CreatePivotTable
28.03.2014 11:16:06
Stefan
Hallo liebe Leute, hallo Franz,
sorry, muß mich leider nochmal mit nem Problem an Euch wenden.
Ich habe den Quellcode jetzt so angepasst, dass alle bereits existierenden Pivottabellen im aktiven Worksheet gelöscht werden, bevor eine neue Pivottabelle erzeugt wird. Mein Problem hierbei: Da sich die Lösch- Anweisung im If-Block befindet, wird der Else-Block (und damit die Erstellung der neuen Tabelle) logischerweise nicht mehr ausgeführt. Mein Versuch, die Prüfung und Löschung alter Pivottabellen nur in eine If - End If - Anweisung zu kapseln, damit im Anschluss in jedem Fall die neue Pivottabelle erstellt wird, hat mir den Laufzeitfehler 1004 beschert. Bin über Tipps wie immer sehr dankbar!
Hier der Code:
Sub makepivot()
Dim activeWB As Workbook
Dim sourceWB As Workbook
Dim quellblatt As Worksheet
Dim zielblatt As Worksheet
Dim quellbereich As String
Dim zielbereich As String
Dim sPath As String
sPath = "C:\Users\BUS7LR\Desktop\Excel Makros\ASPECSS_2013_1_bis_12.xlsm"
quellbereich = "H2:J16"
zielbereich = "B2:D14"
Set activeWB = ThisWorkbook
Set sourceWB = Application.Workbooks.Open(sPath, ReadOnly:=True)
Set quellblatt = sourceWB.Worksheets(1)
Set zielblatt = activeWB.Worksheets(1)
Dim pcache As PivotCache
Dim ptable As PivotTable, ptField As PivotField
Set pcache = activeWB.PivotCaches.Create(SourceType:=xlDatabase, _
SourceData:=quellblatt.Range(quellbereich))
If zielblatt.PivotTables.Count >= 1 Then
ActiveSheet.PivotTables("PivotTable1").PivotSelect "", xlDataAndLabel, True
ActiveSheet.PivotTables("PivotTable1").ClearTable
sourceWB.Close savechanges:=False
End If
Else
Set ptable = pcache.CreatePivotTable( _
TableDestination:=zielblatt.Range(zielbereich).Range("A1"), _
TableName:="PivotTable1", DefaultVersion:=xlPivotTableVersion12)
' ####   Pivotfelder einfügen - zum Testen #####
Set ptField = ptable.PivotFields(2)
ptField.Orientation = xlRowField
Set ptField = ptable.PivotFields(1)
ptField.Orientation = xlRowField
Set ptField = ptable.PivotFields(3)
ptField.Orientation = xlDataField
ptable.DataFields(1).

Function = xlSum
ptable.DataFields(1).Name = "Summe " & ptable.PivotFields(3).Name
sourceWB.Close savechanges:=False
activeWB.Activate
End If
End Sub

Anzeige
AW: Excel 2007 Laufzeitfehler 5 bei CreatePivotTable
28.03.2014 12:48:13
fcs
Hallo Stefan,
pTable.ClearTable setzt "nur" die Pivottabelle zurück, so dass alle plazierten Felder entfernt sind.
pTable.TableRange2.Clear löscht tatsächlich den Pivot-Bericht. Erst danach kann an der gleichen Position ein neur Pivotbericht eingefügt werden.
Alle Pivot-Tabellen in einem Tabellenblatt kan man in einer Schleife löschen.
Gruß
Franz
Sub makepivot()
Dim activeWB As Workbook
Dim sourceWB As Workbook
Dim quellblatt As Worksheet
Dim zielblatt As Worksheet
Dim quellbereich As String
Dim zielbereich As String
Dim sPath As String
Dim pCache As PivotCache
Dim pTable As PivotTable, ptField As PivotField
sPath = "C:\Users\BUS7LR\Desktop\Excel Makros\ASPECSS_2013_1_bis_12.xlsm"
quellbereich = "H2:J16"
zielbereich = "B2:D14"
Set activeWB = ThisWorkbook
Set zielblatt = activeWB.Worksheets(1)
If zielblatt.PivotTables.Count >= 1 Then
'Alle Pivot-Tabellen im Zielblatt löschen
For Each pTable In zielblatt.PivotTables
pTable.ClearTable
pTable.TableRange2.Clear
Next
End If
'Quelldatei schreibgeschützt öffnen
Set sourceWB = Application.Workbooks.Open(sPath, ReadOnly:=True)
Set quellblatt = sourceWB.Worksheets(1)
'Pivot-Tabelle anlegen
Set pCache = activeWB.PivotCaches.Create(SourceType:=xlDatabase, _
SourceData:=quellblatt.Range(quellbereich))
Set pTable = pCache.CreatePivotTable( _
TableDestination:=zielblatt.Range(zielbereich).Range("A1"), _
TableName:="PivotTable1", _
DefaultVersion:=xlPivotTableVersion12)
'Pivotfelder einfügen - zum Testen
Set ptField = pTable.PivotFields(2)
ptField.Orientation = xlRowField
Set ptField = pTable.PivotFields(1)
ptField.Orientation = xlRowField
Set ptField = pTable.PivotFields(3)
ptField.Orientation = xlDataField
pTable.DataFields(1).Function = xlSum
pTable.DataFields(1).Name = "Summe " & pTable.PivotFields(3).Name
sourceWB.Close savechanges:=False
activeWB.Activate
End Sub

Anzeige
AW: Excel 2007 Laufzeitfehler 5 bei CreatePivotTable
01.04.2014 10:57:14
Stefan
Hi Franz :)
super, das hat geholfen. Vielen Dank Dir!! Ich fasse also zusammen: ClearTable setzt die Tabelle zurück, TableRange2.Clear löscht die Pivot-Felder.
Danke schön und schöne Woche!
Gruß,
Stefan

AW: Excel 2007 Laufzeitfehler 5 bei CreatePivotTable
03.04.2014 11:55:02
Stefan
Hallo liebe Gemeinde, Hallo Franz,
hoffentlich eine allerletzte Frage: Im Bereich #### Pivotfelder einfügen #### habe ich jetzt meine eigene Pivottabelle erstellt:
Set ptField = pTable.PivotFields("ENTWICKLUNGSSTUNDEN")
ptField.Orientation = xlRowField
ptField.Orientation = xlDataField
ptField.Function = xlSum
Set ptField = pTable.PivotFields("ENTWICKLUNGSKOSTEN")
ptField.Orientation = xlDataField
ptField.Function = xlSum
Set ptField = pTable.PivotFields("MUSTERKOSTEN")
ptField.Orientation = xlDataField
ptField.Function = xlSum
Mit der Darstellung bin ich leider noch nicht ganz zufrieden: Auf dem Ausgabe-Arbeitsblatt möchte ich die äußerst linke Spalte "Zeilenbeschriftungen" loswerden, so dass wirklich nur noch Entwicklungsstunden, -kosten und Musterkosten zu sehen sind.
Ein weiteres Problem: die Werte sollten nicht sortiert sein, hier sind sie jedoch leider aufsteigend sortiert.
Wie immer schon mal vielen Dank!
Gruß Stefan
Anzeige

81 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige