Anzeige
Archiv - Navigation
1476to1480
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 Tabelle per vba erstellen fkt. nicht mehr

Pivot Tabelle per vba erstellen fkt. nicht mehr
22.02.2016 10:40:25
Dove
Schönen guten Tag,
ich bin ein Vba Neuling und benötige ein wenig Unterstützung. Ich habe ein Makro erstellt welches mir eine Pivot Tabelle automatisch erzeugt. Lief bis jetzt auch ganz prima.
Hier der Code:
Dim pt As PivotTable
Dim cacheofpt As PivotCache
Dim pf As PivotField
Dim pi As PivotItem
Set cacheofpt = ActiveSheet.PivotCaches.Create(xlDatabase, Range("X:X"))
Set pt = ActiveSheet.PivotTables.Add(cacheofpt, Range("a1"), "PivotTable1")
With pt
.PivotFields("PivotTable1").Orientation = xlRowField
End With
Nun habe ich noch eine Abfrage eingefügt, ob im Bereich X:X Zellinhalte durch ein Komma getrennt wurden und ob diese getrennt und in neue Zeilen eingefügt werden sollen.
Die Abfrage funktioniert, aber nun erstellt er mir die Pivot-Tabelle nicht mehr.
Es wird auch keine Fehlermeldung angezeigt.
Hier nochmal das ganze:
Dim a
Dim rngFound As Range
Dim ar As Variant
Dim i As Integer
a = MsgBox("Wollen Sie den Zellinhalt trennen?!", vbYesNo)
If a = vbNo Then Exit Sub Else
With ActiveSheet.Columns("X:X")
Set rngFound = .Find(What:=",", LookIn:=xlFormulas, LookAt:=xlPart)
While Not rngFound Is Nothing
ar = Split(rngFound.Value, ",")
.Rows(rngFound.Row + 1).Resize(UBound(ar)).Insert xlShiftDown
For i = 0 To UBound(ar)
rngFound.Offset(i, 0).Value = ar(i)
Next
Set rngFound = .FindNext(rngFound)
Wend
End With
' PivotTabelle erstellen
Dim pt As PivotTable
Dim cacheofpt As PivotCache
Dim pf As PivotField
Dim pi As PivotItem
Set cacheofpt = ActiveSheet.PivotCaches.Create(xlDatabase, Range("X:X"))
Set pt = ActiveSheet.PivotTables.Add(cacheofpt, Range("a1"), "PivotTable1")
With pt
.PivotFields("PivotTable1").Orientation = xlRowField
.PivotTables("PivotTable1").PivotFields("Status").Orientation = 1
End With
Ich bin für jeden Tipp sehr dankbar
Vielen Dank im Voraus

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

Betreff
Datum
Anwender
Anzeige
AW: Pivot Tabelle per vba erstellen fkt. nicht mehr
22.02.2016 11:39:25
fcs
Hallo Dove,
ich hab versucht deine Makros bei mir unter Excel 2010 zum Laufen zu bekommen.
Bei der Erstellung des Cache und bei der Erstellung des Pivtberichtes funktionierte einiges nicht.
Ich gehe davon aus, dass in Zelle X1 derSpaltentitel "Status" steht.
Probiere mal, ob es mit den folgenden Anpassungen funktioniert.
Es ist hier auch besser, den Namen des Pivot-Berichtes nicht vorzugeben, sondern diesen von Excel automatisch vergeben zu lassen.
Ein in Spalte A vorhandener Pivotbericht muss gelscht werden, bevor ein neuer angelegt wird.
Gruß
Franz
Sub MakePivot01()
Dim pt As PivotTable
Dim cacheofpt As PivotCache
Dim pf As PivotField
Dim pi As PivotItem
ActiveSheet.Columns(1).Clear 'ggf. vorhandenen Pivotbericht in Spalte A löschen
Set cacheofpt = ActiveWorkbook.PivotCaches.Create(SourceType:=xlDatabase, _
SourceData:="'" & ActiveSheet.Name & "'!R1C24:R1048576C24")
Set pt = cacheofpt.CreatePivotTable(TableDestination:=ActiveSheet.Range("A1"))
With pt.PivotFields("Status")
.Orientation = xlRowField
.Position = 1
End With
End Sub
Sub MakePivot02()
Dim a
Dim rngFound As Range
Dim ar As Variant
Dim i As Integer
a = MsgBox("Wollen Sie den Zellinhalt trennen?!", vbYesNo)
If a = vbNo Then Exit Sub
With ActiveSheet.Columns("X:X")
Set rngFound = .Find(What:=",", LookIn:=xlFormulas, LookAt:=xlPart)
While Not rngFound Is Nothing
ar = Split(rngFound.Value, ",")
.Rows(rngFound.Row + 1).Resize(UBound(ar)).Insert xlShiftDown
For i = 0 To UBound(ar)
rngFound.Offset(i, 0).Value = ar(i)
Next
Set rngFound = .FindNext(rngFound)
Wend
End With
' PivotTabelle erstellen
Dim pt As PivotTable
Dim cacheofpt As PivotCache
Dim pf As PivotField
Dim pi As PivotItem
ActiveSheet.Columns(1).Clear 'ggf. vorhandenen Pivotbericht in Spalte A löschen
Set cacheofpt = ActiveWorkbook.PivotCaches.Create(SourceType:=xlDatabase, _
SourceData:="'" & ActiveSheet.Name & "'!R1C24:R1048576C24")
Set pt = cacheofpt.CreatePivotTable(TableDestination:=ActiveSheet.Range("A1"))
With pt
With .PivotFields("Status")
.Orientation = xlRowField
.Position = 1
End With
End With
End Sub

Anzeige
AW: Pivot Tabelle per vba erstellen fkt. nicht mehr
22.02.2016 12:06:41
Dove
Hallo Franz ,
Vielen Dank für die Rückmeldung.
Ich werde es so schnell wie möglich testen und dir dann Bescheid geben.
Danke nochmal

AW: Pivot Tabelle per vba erstellen fkt. nicht mehr
23.02.2016 16:57:52
Dove
Hallo Franz,
nun hatte ich Zeit deine Verbesserung zu testen.
Leider habe ich eine Fehlermeldung bekommen:
"Der PivotTable-Feldname ist ungültig. Um einen PT-Bericht zu erstellen müssen sie Daten verwenden, die in einer Liste mit Spaltenüberschriften organisiert sind. Wenn sie den Namen eines PT-Berichtfeldes ändern, müssen sie einen neuen Namen für das Feld eingeben".
Ich hatte in meiner Ausführung vergessen zu erwähnen, dass sich die Quelldaten, auf was sich die Pivot Tabelle bezieht, immer unterschiedlich sind. Und somit auch der Feldname.
Kann man das anpassen, damit es allgemein gültig ist?
Vielen Dank für deine Mühe

Anzeige
AW: Pivot Tabelle per vba erstellen fkt. nicht mehr
24.02.2016 08:19:32
fcs
Hallo Dove,
hier jetzt eine allgemeinere Variante der Makros
Du muss jetzt "nur" in Zeile
    Set rngSource = ActiveSheet.Range("X:X")

den Zellbereich anpassen.
In der 1. Zelle des Zellbereichs muss immer Inhalt vorhanden sein, der vom Pivotbericht als Feldname verwendet wird.
Sub MakePivot01()
Dim pt As PivotTable
Dim cacheofpt As PivotCache
Dim pf As PivotField
Dim pi As PivotItem
Dim rngSource As Range
Set rngSource = ActiveSheet.Range("X:X")
ActiveSheet.Columns(1).Clear 'ggf. vorhandenen Pivotbericht in Spalte A löschen
With rngSource
Set cacheofpt = ActiveWorkbook.PivotCaches.Create(SourceType:=xlDatabase, _
SourceData:="'" & rngSource.Parent.Name & "'!" _
& rngSource.Range("A1").Address(True, True, xlR1C1) & ":" _
& .Parent.Cells(.Row + .Rows.Count - 1, .Column).Address(True, True, xlR1C1))
End With
Set pt = cacheofpt.CreatePivotTable(TableDestination:=ActiveSheet.Range("A1"))
With pt.PivotFields(rngSource.Range("A1").Text)
.Orientation = xlRowField
.Position = 1
End With
End Sub
Sub MakePivot02()
Dim a
Dim rngFound As Range
Dim ar As Variant
Dim i As Integer
a = MsgBox("Wollen Sie den Zellinhalt trennen?!", vbYesNo)
If a = vbNo Then Exit Sub
Dim rngSource As Range
Set rngSource = ActiveSheet.Range("X:X")
With rngSource.EntireColumn
Set rngFound = .Find(What:=",", LookIn:=xlFormulas, LookAt:=xlPart)
While Not rngFound Is Nothing
ar = Split(rngFound.Value, ",")
.Rows(rngFound.Row + 1).Resize(UBound(ar)).Insert xlShiftDown
For i = 0 To UBound(ar)
rngFound.Offset(i, 0).Value = ar(i)
Next
Set rngFound = .FindNext(rngFound)
Wend
End With
' PivotTabelle erstellen
Dim pt As PivotTable
Dim cacheofpt As PivotCache
Dim pf As PivotField
Dim pi As PivotItem
ActiveSheet.Columns(1).Clear 'ggf. vorhandenen Pivotbericht in Spalte A löschen
With rngSource
Set cacheofpt = ActiveWorkbook.PivotCaches.Create(SourceType:=xlDatabase, _
SourceData:="'" & rngSource.Parent.Name & "'!" _
& rngSource.Range("A1").Address(True, True, xlR1C1) & ":" _
& .Parent.Cells(.Row + .Rows.Count - 1, .Column).Address(True, True, xlR1C1))
End With
Set pt = cacheofpt.CreatePivotTable(TableDestination:=ActiveSheet.Range("A1"))
With pt
With .PivotFields(rngSource.Range("A1").Text)
.Orientation = xlRowField
.Position = 1
End With
End With
End Sub

Anzeige
AW: Pivot Tabelle per vba erstellen fkt. nicht mehr
24.02.2016 08:28:19
Dove
Guten Morgen Franz,
leck mich doch am .....
Es klappt wunderbar. Du hast es echt drauf
Danke dir

316 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige