Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
824to828
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
824to828
824to828
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Inhaltsverzeichnis

Pivotauswahl zurücksetzen mit VBA

Pivotauswahl zurücksetzen mit VBA
08.12.2006 09:35:22
Ronny
Hallo Excel-VBA Experten,
ich habe ein schwieriges Problem mit meinen 6 Privotberichten!
PROBLEM:
Ich habe mehrere Pivotberichte mit jeweils ca. 240 Pivofeldern im Zeilenbereich und einem Feld im Seitenbereich. Wenn man nun dort irgendwo eine Auswahl trifft und dann hin und her scrollt, kann es sein dass man vergisst in welchen Pivotfeld man eine Auswahl vorgenommen hattte und so nun alle Pivotfelder durchsuchen muss bis man das findet indem man die Auswahl getroffen hatte, um diese zurückzusetzen.
IDEE:
Deswegen wollte ich eine Art Aufräum-BUTTON erschaffen, der alle Pviotfelder wieder so zurücksetzt, dass diese wieder den Haken bei "Alle anzeigen" drin haben! Dabei muss man aufpassen, da man ja im Seitenfeld keine Häkchen setzen kann, sondern nur eine einzelauswahl vornehmen kann.
CODE:
'Meine jetzige VBA-Lösung die leider noch nicht funktioniert ist

Private Sub Test_Aufraeumen_Click()
Dim f, i
'Alle anzeigen bei Seitenüberschrift
ActiveSheet.PivotTables(1).PivotFields("Marke").CurrentPage = "(Alle anzeigen)"
'Alle anzeigen bei anderen Feldern:
For Each f In Sheets("Pivot").PivotTables(1).PivotFields
For Each i In f.PivotItems
i.Visible = True
Next i
Next f
End Sub

FEHLER:
Bekomme immer die Fehlermeldung "Die PivotFields-Eigenschaft des PivotTable-Objekts kann nicht zugeordnet werden." (Laufzeitfehler 1004)
Was läuft da schief???
Hat bitte jemand eine zündende Idee wie ich dies mit VBA lösen kann bzw. was ich falsch mache??? kann??? Bin für jede Hilfe!
Gruß,
Ronny

20
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Pivotauswahl zurücksetzen mit VBA
08.12.2006 10:03:14
Beate Schmitz
Hallo Ronny,
an zwei Stellen im Code ist der Name der Pivot Tabelle mit "PivotTables(1)" angegeben.
Stimmt der Name???
Den kannst du so rausfinden:
Klicke mit rechts in die Pivottabelle. Klicke die Schaltfläche Assistent. Dort dann die Schaltfläche Optionen... Im nächsten Dialog wird dir der Name der Pivottabelle oben angezeigt.
Wenn er abweicht, musst du ihn ihm Code korrigieren.
Gruß,
Beate
AW: Pivotauswahl zurücksetzen mit VBA
08.12.2006 10:17:52
Ronny
Hi Beate,
hab nochmal am Namen rumgeändert aber der passte eigentlich und war ok meiner Meinung nach! Hab die Beispieldatei hier mal hochgeladen, bitte schau doch mal rein, vielleicht übersehe ich ja nur irgendwas???

Die Datei https://www.herber.de/bbs/user/38824.xls wurde aus Datenschutzgründen gelöscht

Gruß,
Ronny
Anzeige
AW: Pivotauswahl zurücksetzen mit VBA
08.12.2006 11:00:33
Beate Schmitz
Hallo Ronny,
tausche das Makro mal aus, weil die Seitenfeldnamen und der Blattname nicht angepasst war:

Private Sub Test_Aufraeumen_Click()
Dim f, i
'Alle anzeigen bei Seitenüberschrift
ActiveSheet.PivotTables(1).PivotFields("Anlagen-teil").CurrentPage = "(Alle)"
ActiveSheet.PivotTables(1).PivotFields("Sonder-auswahl").CurrentPage = "(Alle)"
'Alle anzeigen bei anderen Feldern:
For Each f In Sheets("Bilanz_Messwerte").PivotTables(1).PivotFields
For Each i In f.PivotItems
i.Visible = True
Next i
Next f
End Sub

Damit läuft es schonmal besser. Aber an dieser Stelle springt der Debugger an und ich weiß noch nicht, warum:
i.Visible = True
Vielleicht fällt sonst noch jemandem was ein.
Grüße,
Beate
Anzeige
kleine Korrektur
08.12.2006 11:13:18
Beate Schmitz
setze den Blattnamen im Makro auf Sheets("BilanzMesswerte") zurück, den Unterstrich hatte ich zu Testzwecken drin.
Gruß,
Beate
AW: kleine Korrektur
08.12.2006 11:38:25
Ronny
Hi Beate und Excel-VBA-Profis,
wie du schon sagtest bekommt man die Fehlermeldung "Die Visible eigenschaft des Privot Objektes kann nicht festgelegt werden" (Laufzeitfehler 1004) und er springt zur Zeile
i.Visible = True
Hat denn keiner eine Idee wie man dass vermeidet, so dass der Button seine Aufräumfunktion aller Pivofelder vornehmen kann???
Bin für jeden Hilfe dankbar!!!
Gruß,
Ronny
Pivottabelle aufräumen
08.12.2006 13:18:46
Beate Schmitz
Halllo Ronny,
so läuft es bei mir (dank Rolf Beißners Unterstützung):

Private Sub Test_Aufraeumen_Click()
Dim f, i
'Alle anzeigen bei Seitenüberschrift
ActiveSheet.PivotTables(1).PivotFields("Anlagen-teil").CurrentPage = "(Alle)"
ActiveSheet.PivotTables(1).PivotFields("Sonder-auswahl").CurrentPage = "(Alle)"
'Alle anzeigen bei anderen Feldern:
For Each f In Sheets("Bilanz Messwerte").PivotTables(1).PivotFields
On Error Resume Next
For Each i In f.PivotItems
i.Visible = True
Next i
Next f
End Sub

Gruß,
Beate
Anzeige
AW: Pivottabelle aufräumen
08.12.2006 14:03:05
Ronny
Hi Beate,
super nun klappt es ja doch noch, auch wenn ich sagen muss, dass dies nicht die Optimale Lösung ist, da bei 240 Pivotfeldern dies ewig dauert! Habe versucht die Funktion zu beschleunigen über:
Sub getMoreSpeed(bDoIt As Boolean)
Application.ScreenUpdating = Not (bDoIt)
Application.EnableEvents = Not (bDoIt)
Application.Calculation = IIf(bDoIt, xlCalculationManual, xlCalculationAutomatic)
End Sub
und dann halt im Code das aufrufen und zurücksetzen des beschleunigers zu verwenden
Call getMoreSpeed(True) 'Beschnleuniger aufrufen
und
Call getMoreSpeed(False) 'Beschnleuniger zurücksetzen
und dies sah dann zusammen so aus:

Private Sub Auswahl_Zurücksetzen_Click()
Dim f, i
Call getMoreSpeed(True)  'Beschnleuniger aufrufen
'Alle anzeigen bei Seitenüberschrift
ActiveSheet.PivotTables(1).PivotFields("Datum [Tag]").CurrentPage = "(Alle)"
'Alle anzeigen bei anderen Feldern:
For Each f In Sheets("Tmw 1-126").PivotTables(1).PivotFields
On Error Resume Next
For Each i In f.PivotItems
i.Visible = True
Next i
Next f
Call getMoreSpeed(False)  'Beschnleuniger zurücksetzen
End Sub

Klar ist das eine andere Tabelle mit 240 Pivotfelden aber so ist nun mal meine Datei mit den vielen Messungen ^^ Jedenfalls hängt sich Excel auf wenn ich den Beschleuniger anwende.
HAST DU ODER DER NETTE HERR Rolf Beißner vielleicht noch eine Idee wie ich die schneller ablaufen lassen kann???
z.B. sehe ich immer eine aktuallisierung bei jedem Feld wenn dies zurückgesetzt wird, kann man diese Unterdrücken und dann erst die Aktualisierung starten wenn man sozusagen das letzte Häkchen im letzten Pivofeld des Tabellenblattes gesetzt hat, um einfach Zeit zu sparen???
Danke dir aber schonmal für diese Bastel-Lösung, hoffe noch auf eine optimale ^^
Gruß,
ronny
Anzeige
AW: Pivottabelle aufräumen
08.12.2006 14:13:22
Beate Schmitz
Hallo Ronny,
vielleicht ist mein Speed-Makro besser, teste mal:
Dieses also in ein allg. Modul:
Public Sub Get_More_Speed(Optional ByVal An As Boolean = True)
With Application
If An Then
.Calculation = xlCalculationManual
.DisplayAlerts = False
.EnableCancelKey = xlDisabled
.EnableEvents = False
.Interactive = False
.ScreenUpdating = False
Else
.Calculation = xlCalculationAutomatic
.DisplayAlerts = True
.EnableCancelKey = xlInterrupt
.EnableEvents = True
.Interactive = True
.ScreenUpdating = True
End If
End With
End Sub
Und deinen Code so anpassen:

Private Sub Test_Aufraeumen_Click()
Dim f, i
Get_More_Speed
On Error GoTo ch_exit 'damit jedenfalls wieder alles angeschaltet wird
'Alle anzeigen bei Seitenüberschrift
ActiveSheet.PivotTables(1).PivotFields("Anlagen-teil").CurrentPage = "(Alle)"
ActiveSheet.PivotTables(1).PivotFields("Sonder-auswahl").CurrentPage = "(Alle)"
'Alle anzeigen bei anderen Feldern:
For Each f In Sheets("Bilanz_Messwerte").PivotTables(1).PivotFields
On Error Resume Next
For Each i In f.PivotItems
i.Visible = True
Next i
Next f
ch_exit:
Get_More_Speed False
End Sub

Gruß,
Beate
Anzeige
AW: Pivottabelle aufräumen
08.12.2006 15:06:12
Ronny
Hi Beate,
leider das selbe Problem, Excel hängt sich auf!
Habe mir überlegt vielleicht in eine Andere Richtung zu gehen und den BUTTON so zu ändern, dass dieser nicht mehr alle Pivotfelder auf Alle zurücksetzt, sondern alle 240 Pivotfelder durchsucht wo ALLE nicht ausgewählt ist und den Benutzer dann die Meldung zurückbringt "Feld x wurde verändert, Bitte setzten Sie Feld x auf Alle zurück"! So könnte man die ständigen Aktuallisierungen umgehen beim aufräumen und stattdessen ihn nur suchen lassen wo eine Auswahl getroffen wurde und bestimmt viel Zeit sparen.
Evtl. könnte man auch eine Funktion bei den Button noch einbauen die den Benutzer dann fragt: "Soll das Feld x zurückgesetzt werden auf ALLE?" mit JA oder NEIN und dieser so noch mehr Konfort hätte und wieder halt Zeitersparnis beim Ausführen des Buttons bringen würde.
Hast du eine Idee wie ich dass bewerkstelligen könnte bzw. hat jemand anderes hier einen Lösungsansatz???
Gruß,
Ronny
Anzeige
AW: Pivottabelle aufräumen
08.12.2006 16:27:22
Rolf Beißner
Hallo Ronny,
versuch mal das
fG
Rolf

Private Sub Test_Aufraeumen_Click()
On Error Resume Next
Dim f As PivotField, i As PivotItem
Application.ScreenUpdating = False
With ActiveSheet.PivotTables(1)
For Each f In .PageFields
f.CurrentPage = "(Alle)"
Next
For Each f In .RowFields
For Each i In f.PivotItems
i.Visible = True
Next
Next
End With
Application.ScreenUpdating = True
End Sub

AW: Pivottabelle aufräumen
11.12.2006 09:14:48
Ronny
Hallo Rolf,
stürzt leider wieder ab das gute Excel, scheint zuviel für diese Tabellenkalkulation zu sein. Hast du noch eine Idee wie ich das bewerkstelligen könnte? Vielleicht könnte man ja nur die veränderten Pivotfelder suchen und dann immer nur diese zurücksetzen lassen auf alle. Dies könnte weniger Aufwand sein als wenn jedes Feld zurück gesetzt wird, obwohl es noch auf alle steht, meinst nicht auch?
Gruß,
Ronny
Anzeige
AW: Pivottabelle aufräumen
11.12.2006 09:28:23
Beate Schmitz
Hallo Ronny,
es muss wohl wirklich an der Menge deiner Spalten liegen, dass da Grenzen überschritten werden. Rolfs Makro läuft bei mir mit kleinerer Spaltenzahl super. Wie ist denn die Idee, dass du einen Button einbaust, der die existente eventuell gefilterte Pivottabelle total löscht und per Makro nach deinem Wunsch eine neue generiert. Dann wäre ja auch jedenfalls alles eingeblendet. Könntest du dir ja aufzeichnen und nachbearbeiten. Geht vielleicht sogar schneller.
Gruß,
Beate
AW: Pivottabelle aufräumen
11.12.2006 09:38:21
Rolf Beißner
Hallo Ronny,
kannst du ja mal versuchen

Private Sub Test_Aufraeumen_Click()
On Error Resume Next
Dim f As PivotField, i As PivotItem
Application.ScreenUpdating = False
With ActiveSheet.PivotTables(1)
For Each f In .PageFields
f.CurrentPage = "(Alle)"
Next
For Each f In .RowFields
For Each i In f.PivotItems
If i.Visible = False Then
i.Visible = True
End If
Next
Next
End With
Application.ScreenUpdating = True
End Sub

Aber das ist wie das Stochern im Heuhaufen,
denn bei Beate + mir läuft die Kiste ja einwandfrei.
fG
Rolf
Anzeige
AW: Pivottabelle aufräumen
11.12.2006 10:09:31
Ronny
Hi Rolf,
es scheint wirklich an der Menge der Pivotfelder zu liegen, aber nach 30min breche ich einfach den Test ab, weil dasss nicht zumutbar ist für den Benutzer.
Eine weitere Idee hätte ich aber noch, wie wäre es alle Pivotfelder so zu makieren wie es beim Autofilter gemacht wird wenn eine Auswahl getroffen wird, d.h. der schwarze Pfeil nach unten wird blau sobald man dort etwas ausgewählt hat. Könnte man sowas bei den Pivotfelder vielleicht übernehmen und dies dann später als Anhaltspunkt zu nehmen dass dort eine Veränderung durchgeführt wurde und nicht mehr auf ALLE das Pivotfeld eingestellt ist?
Gruß,
Ronny
Anzeige
AW: Pivottabelle aufräumen
11.12.2006 10:36:17
Rolf Beißner
Hallo Ronny,
für diese Idee sehe ich keine Umsetzungsmöglichkeit.
Offensichtlich ist ja, dass deine Datei für diese Pivotanwendung nicht geeignet ist.
Aus meiner Sicht solltest du daher Beates Vorschlag testen,
oder das auf mehrere Pivottabellen verteilen,
oder über Filter lösen,
oder einfach weiter manuell zurücksetzen,
usw...
fG
Rolf
AW: Pivottabelle aufräumen
12.12.2006 14:54:45
Ronny
Hallo Rolf,
wenn es in der Form nicht möglich ist dies umzusetzen, könnte man dann vielleicht versuchen im Hintergrund Excel mitschrieben zu lassen wenn jemand ein Pivotfeld verändert bzw. dort eine Auswahl trifft? Ähnlich wie beim Makro wo Excel halt mitschreibt was man macht, soll hier nur mitgeschrieben werden welches Pivotfeld verändert wird in welchen Tabellenblatt!
Dann könnte man doch einen Button generieren der auf dieses mitgeschriebene (im Zwischenspeicher oder in einer seperaten Exceltabelle oder so) zugreift und dann anschließend die 4 oder 5 Felder die man da ausgewählt hatte zurücksetzt auf alle anhand der mitgeschriebenen Informationen.
Gäbe es dafür eine VBA-Möglichkeit oder ist das gezielte mitschreiben von Pivotfeld-Auswahl-Veränderungen nicht möglich?
Wichtig! Man müßte natürlich dieses Mitgeschriebene wieder löschbar machen, um die Datei nicht unnötig zu vergrößern.
Was meinst du dazu?
Gruß,
ronny
nur in einer Kopie der Pivottabelle arbeiten!
12.12.2006 20:04:58
Beate Schmitz
Hallo Ronny,
ich füge dir mal die Testdatei bei mit meiner neuesten Idee:
Das eigentliche Blatt der Pivottabelle ist ausgeblendet und dort sind keine Filter gesetzt.
Bei Buttonclick in der Stoffstromtabelle wird eine Kopie der Pivottabelle als Blatt "temp" angelegt, in dem nach Herzenslust gefiltert werden kann.
Hat man gesehen, was man sehen möchte, wechselt man zur Stoffstromtabelle zurück und das "temp"-Blatt wird gelöscht.
Will man was Neues filtern und sicher sein, dass alle Felder eingeblendet sind, macht man einfach über Buttonclick dort eine neue Kopie der Pivottabelle.
Hier die Datei: https://www.herber.de/bbs/user/38921.xls
Müsste auch mit deinen vielen Spalten schnell laufen.
Gruß,
Beate
.CurrentPage = "(All)" '_oT
08.12.2006 13:17:39
NoNet
Also auf ENGLISCH !
Gruß, NoNet
AW: .CurrentPage = "(All)" '_oT
08.12.2006 13:23:21
Ronny
Hi NoNet,
daran hats nicht gelegen, habe immernoch den Fehler:
"Die PivotFields-Eigenschaft des PivotTable-Objekts kann nicht zugeordnet werden." (Laufzeitfehler 1004)
KANN MIR DENN HIER KEINER WEITERHELFEN??? (Ist Wichtig für mich!!!)
Gruß,
Ronny
AW: .CurrentPage = "(All)" '_oT
08.12.2006 13:23:43
Ronny
Hi NoNet,
daran hats nicht gelegen, habe immernoch den Fehler:
"Die PivotFields-Eigenschaft des PivotTable-Objekts kann nicht zugeordnet werden." (Laufzeitfehler 1004)
KANN MIR DENN HIER KEINER WEITERHELFEN??? (Ist Wichtig für mich!!!)
Gruß,
Ronny

282 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige