Office: Frage zu VBA u. Pivot

Helfe beim Thema Frage zu VBA u. Pivot in Microsoft Excel Hilfe um das Problem gemeinsam zu lösen; Hallo zusammen, ist es möglich bei der Pivot über VBA nach einem festen Wert zu selektieren oder muss ich fortlaufend .PivotItems("XY").Visible =... Dieses Thema im Forum "Microsoft Excel Hilfe" wurde erstellt von Drunkenmasta, 28. Januar 2010.

  1. Drunkenmasta Erfahrener User

    Frage zu VBA u. Pivot


    Hallo zusammen,

    ist es möglich bei der Pivot über VBA nach einem festen Wert zu selektieren oder muss ich fortlaufend

    .PivotItems("XY").Visible = False
    .PivotItems("YZ").Visible = False
    etc.

    runterrattern bis der gewünschte Wert überbleibt? Leichter wäre es, nur einen Wert anzeigen zu lassen und den rest auszuschließen wie beim Autofilter.

    Danke schon mal für eventuelle Lösungsvorschläge

    Greetz
     
    Drunkenmasta, 28. Januar 2010
    #1
  2. Thomas Ramel MVP für Microsoft Excel
    Grüezi ....Masta

    Das kommt darauf an in welchem Bereich der PT dieses Feld denn liegt.

    Wenn Du wirklich nur ein einzelnes Item anzeigen lassen willst, dann verschiebe das Feld in den Seitenbereich der PT. Hier kannst Du sehr einfach immer ein einzelnes Item zur Darstellung anzeigen lassen.

    Wenn das Ganze mit VBA gesteuert werden soll, kannst Du den Makro-Recorder zur Aufzeichnung verwenden.


    Liegt das Feld im Zeilen- oder Spaltenbereich kommst Du um das 'abklappern' aller Items nicht herum.
     
    Thomas Ramel, 29. Januar 2010
    #2
  3. Drunkenmasta Erfahrener User
    Moin Thomas,

    danke schon mal für die Hilfe.

    Ich hab mich schon immer gefragt was das Feld da oben so kann...

    aber wenn ich da über VBA die Pivot selektieren lasse ergeben sich folgende Probleme:

    1. es verschwinden plötzlich items aus der ursprünglichen Tabelle (z. B. ist XY nicht mehr da wenn ich selber was auswählen möchte (auch wenn ich "show all" "programmiere" -> hoffe Du weisst was ich meine

    XY ist aber im Datensatz vorhanden, über "Aktualisieren" der Pivot aber auch nicht "herstellbar"

    2. wenn ich nach Werten selektiere, die nicht im Datensatz sind (das Ganze ist für einen Report der wöchentlich/monatlich variiert) bekomme ich einen Fehler (z. B. im nächsten Monat steht XY nicht zur Auswahl weil nix verkauft)

    Greeeeeeeeeeeeetz
     
    Drunkenmasta, 29. Januar 2010
    #3
  4. Thomas Ramel MVP für Microsoft Excel

    Frage zu VBA u. Pivot

    Grüezi ...Masta

    Nein, nicht wirklich - Du hast vermutlich nicht im Seiten- sondern im Datenfeld 'rumgemacht'.
    Diese zwei Bereiche kannst du aber absolut nicht miteinander vergleichen - das eine ist ein Kriterinefeld (da kannst Du festlegen welche Kriterien bei der Auswertung berücksichtigt werden sollen), das andere ist die Auswertung/Berechnung selbt (da kannst Du festlegen welche Elemente berechnet werden).

    Auch das weist darauf hin, dass Du dich im Datenfeld und nicht im Seitenfeld bewegt hast.

    [/quote]2. wenn ich nach Werten selektiere, die nicht im Datensatz sind (das Ganze ist für einen Report der wöchentlich/monatlich variiert) bekomme ich einen Fehler (z. B. im nächsten Monat steht XY nicht zur Auswahl weil nix verkauft)[/quote]

    Ja, das ist logisch - Du kannst nicht selektieren, was nicht vorhanden ist.
    Soelche Fehler musst Du halt entweder abfangen oder (besser) gar nicht erst aufkommen lassen indem du vor dem Auswählen eines Items zuerst prüfst, ob dieses denn in dem entsprechenden Pivot-Field auch vorhanden ist (über eine Schleife eben, die alle Items zuerst prüft).


    Aber eigentlich machen wir hier Trockenschwimmen - ich kann dir keine konkreten Hinweise geben, wenn ich dein Vorhaben, die PT und deinen verwendeten VBA-Code nicht kenne.....
    Dazu kommt, dass z.B. in xl2007 einige Features zur PT hinzugekommen sind, also ist auch die Excel-Version, mit der Du arbeiten willst, wichtig.
     
    Thomas Ramel, 30. Januar 2010
    #4
  5. Drunkenmasta Erfahrener User
    Moin,

    ich nutze Excel 2003 wie in der Überschrift. Die Felder sind aber tatsächlich im Seitenbereich. Wenn ich dort einen bestimmten Wert auswähle und dann wieder Alle wähle, verschwindet die Hälfte die vorher noch zur Auswahl stand. Der Code sieht zur Zeit so aus:

    Sheets("Pivot").Select
    ActiveSheet.PivotTables("PivotTable1").PivotFields("Type").CurrentPage = _
    "ABC"
    Range("D1").Select
    Selection.Copy
    Sheets("Splittet").Select
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
    :=False, Transpose:=False
    Range("B9").Select
    Sheets("Pivot").Select
    ActiveSheet.PivotTables("PivotTable1").PivotFields("Type").CurrentPage = _
    "(Alle)"

    Jetzt müsste da ja erstmal die Abfrage/Schleife vorgebastelt werden.
    Wie baue ich denn so eine Schleife? Ich hatte da schon mehrere Vorschläge aus dem I-Net die nicht wirklich funktionert haben.

    Danke nochmal

    [/code]
     
    Drunkenmasta, 30. Januar 2010
    #5
  6. Thomas Ramel MVP für Microsoft Excel
    Grüezi ...Masta

    Der Titel wird leider nur ganz oben gezeigt, ab dem zweiten, dritten Beitrag scrollt er anch oben aus dem Bildschrm - also xl2003.

    Was Du beschreibst liegt dann wohl daran, dass das alte Einträge sind, die nicht mehr in der Datenquelle zur Verfügung stehen, aber im DropDown noch aufgeführt werden.
    Lass mal die folgenden Zeilen laufen, dann ist dieser Punkt im Moment bereinigt:

    Code:
    Sub DeleteOldPivotItemsWB()
    'löschen von nicht mehr verwendeten Einträgen in Pivot-Tabellen
    'basierend auf MSKB (Q202232)
    Dim wS                        As Worksheet
    Dim pt                        As PivotTable
    Dim pf                        As PivotField
    Dim pi                        As PivotItem
    
        If Application.Version < 10 Then
            'Für alle älteren Excel-Versionen
            For Each wS In ActiveWorkbook.Worksheets
                For Each pt In wS.PivotTables
                    pt.RefreshTable
                    pt.ManualUpdate = True
                    For Each pf In pt.PivotFields
                        For Each pi In pf.PivotItems
                            If pi.RecordCount = 0 And _
                               Not pi.IsCalculated Then
                                pi.Delete
                            End If
                        Next
                    Next
                    pt.ManualUpdate = False
                Next
            Next
        Else
            'Als Alternative ab xl2002
            For Each wS In ActiveWorkbook.Worksheets
                For Each pt In wS.PivotTables
                    pt.ManualUpdate = True
                    pt.PivotCache.MissingItemsLimit = xlMissingItemsNone
                    pt.RefreshTable
                    pt.ManualUpdate = False
                Next pt
            Next wS
        End If
    End Sub

    Die einzelnen Items solltest Du so durchlaufen können:

    Code:
    Dim pt                        As PivotTable
    Dim pf                        As PivotField
    Dim pi                        As PivotItem
    
                For Each pt In ActiveSheet.PivotTables
                    pt.RefreshTable
                    pt.ManualUpdate = True
                    For Each pf In pt.PivotFields
                        For Each pi In pf.PivotItems
                              MsgBox Pi.Name
                        Next
                    Next
                    pt.ManualUpdate = False
                Next
            Next
     
    Thomas Ramel, 30. Januar 2010
    #6
  7. Drunkenmasta Erfahrener User
    aja, danke schonmal. Durch den 2. Code steige ich leider nicht so durch, hab mir das mit VBA selber beigebogen deswegen bin ich da nur Anfänger.

    Kopiere ich den Code vor die bestehenden oder muss ich die Alten ersetzen und diesen an die "Bedürfnisse" anpassen?

    Greetzi
     
    Drunkenmasta, 30. Januar 2010
    #7
  8. Thomas Ramel MVP für Microsoft Excel

    Frage zu VBA u. Pivot

    Grüezi ...Masta

    Na, dann hast Du dir einen etwas grossen Brocken vorgenommen, fürchte ich mal....

    Die Zeilen sind als Beispiel gedacht - erstelle eine eigene Sub damit und versuche die Zeilen zu verstehen.

    Fertig angerichtete Dinge wirst Du hier wohl kaum finden - Hilfe zur Selbsthilfe ist das Moto der Foren.
     
    Thomas Ramel, 30. Januar 2010
    #8
  9. Drunkenmasta Erfahrener User
    So ich habe jetzt diverse Wege probiert und das Thema so halbwegs verstanden aber einfach nicht hinbekommen, wie ich

    1. prüfe ob XYZ im PivotFeld (ABC) vorhanden ist
    1.1 wenn ja dann tu dies (Copy etc.)
    1.2 wenn nicht dann gehe zum nächsten "Vergleich"

    bis zum Ende durch.

    Die Copy-Geschichten usw. sind ja überhaupt kein Problem nur diese Schleife... habe mind. 10-20 Wege probiert aber nichts hat gefunzt.
     
    Drunkenmasta, 31. Januar 2010
    #9
  10. Thomas Ramel MVP für Microsoft Excel
    Grüezi Masta

    Hmmm, ich glaube so kommen wir hier nicht viel weiter.

    Kannst Du bitte eine Demo-Mappe auf einen WebSpace hochladen und dann den Link hier nennen?

    Beschreibe dann bitte auch genau was Du wie haben oder prüfen willst, dann können wir uns die Sache am 'lebenden Patienten' ansehen.
     
    Thomas Ramel, 31. Januar 2010
    #10
  11. Drunkenmasta Erfahrener User
    hier ist die Datei. Was ich versuche steht im Textfeld.

    Greetzi


    PS
    von der Pivot habe ich einen Screenshot im Sheet Pivot eingefügt, da die Datei zu groß geworden wäre
     
    Drunkenmasta, 1. Februar 2010
    #11
  12. Thomas Ramel MVP für Microsoft Excel
    Grüezi Masta

    Hmmm, man kann zwar die Items eines Seitenfeldes durchlaufen und dann die Werte auslesen (das würde ich aber nicht direkt aus der PT machen sondern mit einer Hilfsformel). Das macht der VBA-Code, den ich in die Mappe eingefügt habe zusammen mit der Hilfszelle D1 welche per Funktin dann das Total ausliest.
    Der VBA-Code stellt die einzelnen Items nacheinander ein, die Funktion liest den Wert aus und der VBA-Code überträgt dann diesen Wert in deine Liste.

    Wenn Du die PT etwas anders gestaltest - das ist die zweite Darstellung der PT unten auf dem Blatt, dann kannst Du alle diese Werte bequem per Formel und ganz ohne VBA auslesen.

    Schaus dir mal näher an, ansonsten hast Du ja nun ein schönes Muster für den VBA-Code.
     
    Thomas Ramel, 2. Februar 2010
    #12
  13. Drunkenmasta Erfahrener User

    Frage zu VBA u. Pivot

    Hi Thomas,

    perfekt. Ein büschn frisiert und jetzt läuft alles super. Natürlich steht man dann auch gleich vor dem nächsten Problem...

    in einer Spalte im Sheet data müsste ich über VBA Sachen filtern, die Text enthalten (wie beim Autofilter) z. B. enthält *Elefant*, damit er rosa, pink, schwarz etc. gleich einbezieht bzw. ausblendet.

    Über eine normal Formel habe ich das schon hinbekommen aber der PC auf der Arbeit schafft nicht.

    Kann ich dafür evtl. auch deinen Code aus der xls nehmen und etw. abändern?

    Danke nochmal für die super Hilfe weiter oben

    Greetz
     
    Drunkenmasta, 8. Februar 2010
    #13
  14. Thomas Ramel MVP für Microsoft Excel
    Grüezi ...masta

    Was soll denn mit diesen gefilterten Daten geschehen?

    Ziehe die Spalte ebenfalls in die PT und filtere dort dann die Werte wie gewünscht.


    Oder was genau willst Du tun?
     
    Thomas Ramel, 10. Februar 2010
    #14
  15. Drunkenmasta Erfahrener User
    Moinsen,

    die gefilterten Daten ergeben ebenfalls einen Wert der ausgewiesen wird. Da diese natürlich auch wieder variabel sind, wäre ne Art "enthält/enthält nicht" schon ganz praktisch.

    In der Beispieldatei oben wäre das z. B.: filtere alles was "Retour" in Verkaufsart enthält also Warengruppe A, B etc.

    Der Autofilter schafft das bei größerer Datenmenge leider nicht und Formeln zwingen den PC in die Knie.

    Greetzi
     
    Drunkenmasta, 10. Februar 2010
    #15
Thema:

Frage zu VBA u. Pivot

Die Seite wird geladen...
  1. Frage zu VBA u. Pivot - Similar Threads - Frage VBA Pivot

  2. Frage zu Tutorial "Excel - Auswertung von farbigen Zellen"

    in Microsoft Excel Hilfe
    Frage zu Tutorial "Excel - Auswertung von farbigen Zellen": Hallo, sorry, ich war leider zu schnell... konnte das "Problem" jetzt selber lösen. Weiß aber leider nicht, wie man einen Beitrag wieder löscht. gestern bin ich mit der 1. VBA Variante super...
  3. VBA-Frage

    in Microsoft Access Hilfe
    VBA-Frage: Hallo zusammen, erhalte die Fehlermeldung - falche Anzahl an Argumenten oder ungültige Zuweisung einer Eigenschaft. Code: Function MSGOK() As Integer On Error GoTo MSGOK_ERR MSGOK = True...
  4. VBA Frage Access / Excel

    in Microsoft Access Hilfe
    VBA Frage Access / Excel: Hallo zusammen, kann ich aus Access heraus Spalten in einem Excel Sheet was nicht verknüpft ist irgendwie löschen ? Zugreifen auf das Excel Sheet kann ich Code: SELECT * FROM [excel...
  5. VBA - Was macht FreeFile und weitere Fragen

    in Microsoft Excel Hilfe
    VBA - Was macht FreeFile und weitere Fragen: Hallo zusammen, ich habe mal wieder einige Fragen an die VBA Experten. Das Makro zum Überprüfen, ob ein File bereits geöffnet ist oder nicht, habe ich aus dem Netz gefischt...
  6. Frage zur Datumsfunktion (VBA)

    in Microsoft Excel Hilfe
    Frage zur Datumsfunktion (VBA): Hallo Leute, ich habe folgenden VBA-Code gefunden, mit dem man Tabellenblätter auswählen kann, wenn sie nach Monaten benannt sind. Das funktioniert aber nur bei voll ausgeschriebenen Monaten,...
  7. Frage zu Besonderheit in VBA

    in Microsoft Excel Hilfe
    Frage zu Besonderheit in VBA: Hallo zusammen! Oft finde ich Formulierungen die aus meiner Sicht das Gleiche meinen aber dennoch beide unterscheidlich genutzt werden. If Left$(strPath, 2) = "\\" Then If Left(strPath, 2) =...
  8. dynamisches Diagramm - VBA Frage - Excel 2003

    in Microsoft Excel Hilfe
    dynamisches Diagramm - VBA Frage - Excel 2003: Guten Morgen miteinander, habe mal wieder ein Problem mit einer VBA Programmierung. Bisher: Ich habe Geschäftsjahr mit den einzelnen Monate von Okt bis Sept. Diese Monate sind Gruppiert in den...
  1. Diese Seite verwendet Cookies, um Inhalte zu personalisieren, diese deiner Erfahrung anzupassen und dich nach der Registrierung angemeldet zu halten.
    Auf dieser Website werden Cookies für die Zugriffsanalyse und Anzeigenmessung verwendet.
    Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies.
    Information ausblenden