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

Forumthread: Pivottabelle - alle Details einblenden m. VBA Loop

Pivottabelle - alle Details einblenden m. VBA Loop
26.02.2008 20:29:00
Andreas
Hallo Herber Freunde;
ich habe ein kleines Problem mit der Möglichkeit Details in einer Pivottabelle. In letzter Zeit nutze ich verstärkt die Möglichkeit, für einzelne Datenfelder Details auszublenden, um die Übersichtlichkeit zu erhöhen. Nun habe ich aber festgestellt, daß diese sich nicht im Massenverfahren wieder einblenden lassen. Zumindest habe ich in der Excel Hilfe nichts gefunden, um alle Details für eine Pivot einblenden zu lassen. Hier im Forum auch nichts. In der Beispieldatei kann man den Effekt sehen bei den Kategorien „Dübel, Farbe und Holzlatten“ für das Feld „Lieferant“ Dort habe ich jeweils die Details ausgeblendet und bekomme sie auch nur einzeln wieder rein. Entweder Doppelklick (auf das Item in der Spalte „Material“) oder in der Pivotleiste auf das Plus clicken. Das ist bei einer großen Pivot sehr, sehr mühsam.
https://www.herber.de/bbs/user/50211.xls
Frage: Kennt jemand eine Option, um Alle Details von Pivot Datenfeldern auf einen Schlag einzublenden. Bzw. Welcher VBA Befehl würde in meiner Makro Schleife diesen Effekt haben, daß alle Details einbeblendet werden. (Modul: „Detaileinblenden“). Bei meinem derzeitigen Code bekomme ich folgende Fehlermeldung: „Objekt unterstützt diese Eigenschaft nicht.“ Aber diese Eigenschaft ist mir vom Makrorekorder ausgegeben worden. Aus der VBA Hilfe kann ich leider auch nichts für meinen Fall herauslesen.
Vielen Dank für Eure Mühe,
Grüße, Andreas

Anzeige

6
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Pivottabelle - alle Details einblenden m. VBA Loop
26.02.2008 21:09:00
Luschi
Hallo Andreas,
wenn Du ein ToggleButton nimmst, dann geht's so:

Private Sub ToggleButton2_Click()
Dim pvItem As PivotItem, pvField As PivotField, pvTable As PivotTable, _
ok As Boolean, s As String
getMoreSpeed True
ok = Me.ToggleButton2.Value
Set pvTable = ActiveSheet.PivotTables("PivotTable1")
Set pvField = pvTable.PivotFields("Material")
For Each pvItem In pvField.PivotItems
pvItem.ShowDetail = ok
Next
If ok Then
s = "alle Anzeigen"
Else
s = "alle Ausblenden"
End If
Me.ToggleButton2.Caption = s
Set pvItem = Nothing
Set pvField = Nothing
Set pvTable = Nothing
getMoreSpeed False
End Sub
Sub getMoreSpeed(bDoIt As Boolean)
Application.ScreenUpdating = Not (bDoIt)
Application.EnableEvents = Not (bDoIt)
Application.Calculation = IIf(bDoIt, xlCalculationManual, xlCalculationAutomatic)
End Sub

Gruß von Luschi
aus klein-Paris

Anzeige
kleine Korrektur
26.02.2008 21:14:00
Luschi
Hallo Andreas,
bitte ändere dies noch ab:

If ok Then
s = "alle Ausblenden"
Else
s = "alle Anzeigen"
End If

Gruß von Luschi
aus klein-Paris

AW: kleine Korrektur
27.02.2008 10:53:00
Andreas
Hi Luschi,
dank für Deinen Code. Der ist komplizierter, als ich so dachte… er funktioniert gut. Ich hatte die Beispieldatei nicht ganz korrekt erstellt. Ich habe nun noch ein Datenfeld „Baustelle“ drin. Was ich meinte war, über eine Schleife jeweils alle Details zu allen Datenfeldern zu erhalten. Praktisch wieder einen Ursprungszustand der Ansicht. Ich habe nun exemplarisch ein paar Details in der Baustelle ausgeblendet. Wenn ich auf Lieferanten alle Details anzeigen gehe, dann zeigt er Buastellendetails nicht für Harry Bo und Meier. Weil ich bei diesen beiden einmal die Details ausgeblendet habe. Deswegen hatte ich ja auch die Idee mit der Schleife. Blende erst alle für die Lieferanten ein, dann alle für die Baustelle, etc. Unabhängig von vorherigen manuellen Einstellungen. Was mir heute noch eingefallen ist wäre zuerst eine Auswertung wo sich der Cursor/ die aktive Zelle befindet, diese wird ausgewertet und der Namen des Pivot Datenfeldes der aktiven Zelle wird als Variable an den Code zum Einblenden übergeben. So entfällt die Einschränkung auf ein Datenfeld, welches fest im Code hinterlegt ist. Ich habe aber keine Ahnung, wie man das Auslesen kann und auch im Forum nichts gefunden. Einzig der Hinweis auf Get.Cell klang viel versprechend.
Wenn dich dieser Ansatz interessiert, würde ich mich freuen, Deine Meinung bezüglich der Machbarkeit zu hören.
https://www.herber.de/bbs/user/50219.xls
Ansonsten danke ich Dir noch einmal für Deinen bisher geleisteten Einsatz und den guten Code!
Viele Grüße aus Berlin, Andreas

Anzeige
AW: kleine Korrektur
27.02.2008 11:34:00
Luschi
Hallo Andreas,
schaue mir das Problem heute Abend mal an.
Gruß von Luschi
aus klein-Paris

neue Version
27.02.2008 22:51:00
Luschi
Hallo Andreas,
hier mal die neue Version: https://www.herber.de/bbs/user/50247.xls
Habe ein neues ToggleButton eingefügt, mit dem nur alle Daten des Pivot-Zweiges voll sichtbar sind, indem der Cursor aktiv ist.
Gruß von Luschi
aus klein-Paris

Anzeige
AW: neue Version
29.02.2008 11:36:42
Andreas
Hallo Luschi,
ich bin begeistert! Danke, daß Du meinen Ansatz aufgenommen und den Code entwickelt hast. Es funktioniert genauso wie es mir vorschwebte. Aber wieder der Effekt für mich, daß der Code doch sehr komplex ist. Ich werde mir nun bei einem Kaffee die Zeit nehmen und versuchen ihn zu verstehen. Ich glaub das ist der erste Array Code den ich sehe...
Sehr gute Arbeit!
Vielen Dank und Grüße aus Berlin, Andreas Hanisch
Anzeige
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Anzeige
Anzeige
Anzeige

Infobox / Tutorial

Pivottabelle: Alle Details einblenden mit VBA


Schritt-für-Schritt-Anleitung

Um alle Details in einer Pivottabelle mithilfe von VBA einzublenden, kannst du den folgenden Code verwenden. Dieser Code wird durch einen ToggleButton aktiviert:

Private Sub ToggleButton2_Click()
    Dim pvItem As PivotItem, pvField As PivotField, pvTable As PivotTable
    Dim ok As Boolean, s As String
    getMoreSpeed True
    ok = Me.ToggleButton2.Value
    Set pvTable = ActiveSheet.PivotTables("PivotTable1")
    Set pvField = pvTable.PivotFields("Material")
    For Each pvItem In pvField.PivotItems
        pvItem.ShowDetail = ok
    Next
    If ok Then
        s = "alle Anzeigen"
    Else
        s = "alle Ausblenden"
    End If
    Me.ToggleButton2.Caption = s
    Set pvItem = Nothing
    Set pvField = Nothing
    Set pvTable = Nothing
    getMoreSpeed False
End Sub

Sub getMoreSpeed(bDoIt As Boolean)
    Application.ScreenUpdating = Not (bDoIt)
    Application.EnableEvents = Not (bDoIt)
    Application.Calculation = IIf(bDoIt, xlCalculationManual, xlCalculationAutomatic)
End Sub

Dieser Code durchläuft alle Elemente des Pivot-Feldes "Material" und blendet die Details ein oder aus, abhängig vom Status des ToggleButtons.


Häufige Fehler und Lösungen

  1. Fehlermeldung: "Objekt unterstützt diese Eigenschaft nicht."

    • Stelle sicher, dass der Name der Pivottabelle und des Pivot-Feldes korrekt angegeben ist. Überprüfe die Schreibweise und die Exaktheit der Namen.
  2. Details werden nicht wie gewünscht ein- oder ausgeblendet.

    • Vergewissere dich, dass das Pivot-Feld, das du ansprechen möchtest, auch tatsächlich im aktiven Arbeitsblatt vorhanden ist.

Alternative Methoden

Falls du keine VBA-Lösung verwenden möchtest, kannst du auch manuell alle Details in deiner Pivottabelle anzeigen lassen:

  1. Klicke auf das Plus-Zeichen (+) neben dem entsprechenden Element in deiner Pivottabelle.
  2. Wenn du alle Details einblenden möchtest, kannst du auch die Pivot-Tabellenoption "Alle anzeigen" verwenden.

Das Excel-Feature "Pivot Tabelle alle einklappen" könnte dir helfen, die Übersichtlichkeit zu verbessern, bevor du die Details wieder einblendest.


Praktische Beispiele

  • Beispiel 1: Du hast eine Pivottabelle mit den Feldern "Lieferant" und "Material". Mit dem oben genannten VBA-Skript kannst du alle Details für "Material" auf einmal anzeigen.

  • Beispiel 2: Wenn du mehrere Pivot-Felder hast, könntest du eine Schleife implementieren, die durch alle Felder iteriert und diese nach Bedarf ein- oder ausblendet. So kannst du sicherstellen, dass alle Details in deiner Pivot Tabelle einblenden werden.


Tipps für Profis

  • Nutze getMoreSpeed, um die Performance deines Codes zu optimieren, insbesondere wenn du mit großen Datenmengen arbeitest.
  • Experimentiere mit unterschiedlichen Pivot-Feldern, um die Flexibilität deines Codes zu erhöhen. Du kannst den Pivot-Feld-Namen dynamisch ermitteln, indem du die aktive Zelle ausliest.

FAQ: Häufige Fragen

1. Wie kann ich alle Details in mehreren Pivot-Feldern gleichzeitig einblenden? Du kannst eine Schleife implementieren, die durch die verschiedenen Pivot-Felder iteriert und die Methode ShowDetail für jedes Feld aufruft.

2. Funktioniert dieser Code in allen Excel-Versionen? Der VBA-Code sollte in den meisten aktuellen Excel-Versionen funktionieren. Stelle sicher, dass du die richtige Version verwendest, die VBA unterstützt.

3. Was ist der Unterschied zwischen „Details einblenden“ und „Alle Details einblenden“? „Details einblenden“ bezieht sich auf das Einblenden von Details für ein einzelnes Element, während „Alle Details einblenden“ alle Details eines gesamten Pivot-Feldes auf einmal anzeigt.

4. Kann ich den Code anpassen, um nur bestimmte Details anzuzeigen? Ja, du kannst Bedingungen in die Schleife einfügen, um nur die gewünschten Details basierend auf festgelegten Kriterien anzuzeigen.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Entdecke mehr
Finde genau, was du suchst

Die erweiterte Suchfunktion hilft dir, gezielt die besten Antworten zu finden

Suche nach den besten Antworten
Unsere beliebtesten Threads

Entdecke unsere meistgeklickten Beiträge in der Google Suche

Top 100 Threads jetzt ansehen
Anzeige