Nur bestimmte PivotItems auf Visible setzen

  • Excel

Es gibt 3 Antworten in diesem Thema. Der letzte Beitrag () ist von empfl.

    Nur bestimmte PivotItems auf Visible setzen

    Hallo,

    ich habe folgendes VBA-Makro im Internet gefunden und auf meine Beispiel Datei abgeändert.

    Ich möchte auf der Basis, der in einem bestimmten Bereich gespeicherten Informationen, den
    entsprechenden Filter in der Pivot-Tabelle mit diesem Makro erzeugen.

    Visual Basic-Quellcode

    1. ​Sub Nur_bestimmte_PivotItems_anzeigen()
    2. Dim vArray As Variant
    3. Dim i As Integer, j As Integer
    4. Dim pt As PivotTable
    5. Dim pf As PivotField
    6. Sheets("auswahl").Select
    7. vArray = Range("b2:b4")
    8. Sheets("pivot").Select
    9. Set pt = Application.ActiveSheet.PivotTables(1)
    10. Set pf = pt.PivotFields("Name")
    11. pf.ClearAllFilters
    12. With pf
    13. For i = 1 To pf.PivotItems.Count
    14. j = 1
    15. Do While j <= UBound(vArray, 1) - LBound(vArray, 1) + 1
    16. If pf.PivotItems(i).Name = vArray(j, 1) Then
    17. pf.PivotItems(pf.PivotItems(i).Name).Visible = True
    18. Exit Do
    19. Else
    20. pf.PivotItems(pf.PivotItems(i).Name).Visible = False
    21. End If
    22. j = j + 1
    23. Loop
    24. Next i
    25. End With
    26. End Sub


    Wie gesagt mit der Beispieldatei klappt das. Wenn ich jedoch dieses Makro auf eine Power-Pivot
    übertrage, welche ihre Daten mit einer OLAP-Abfrage aus einer SQl-Datenbank bezieht
    bekomme ich bei der Zeile:

    Quellcode

    1. ​pf.PivotItems(pf.PivotItems(i).Name).Visible = False


    den Fehler: "Laufzeitfeher '1004', Die Visible Eigenschaft des PivotItem-Objektes kann nicht festgelegt werden."

    Visual Basic-Quellcode

    1. ​Sub Nur_bestimmte_PivotItems_anzeigen_2tenS()
    2. Dim vArray As Variant
    3. Dim i As Integer, j As Integer
    4. Dim pt As PivotTable
    5. Dim pf As PivotField
    6. Sheets("Kost_Liste").Select
    7. vArray = Range("b2:b5")
    8. Sheets("tot_cost_act_mon").Select
    9. Set pt = Application.ActiveSheet.PivotTables(1)
    10. Set pf = pt.PivotFields("[Cost].[Cost Center Id].[Cost Center Id]")
    11. pf.ClearAllFilters
    12. With pf
    13. For i = 1 To pf.PivotItems.Count
    14. j = 1
    15. Do While j <= UBound(vArray, 1) - LBound(vArray, 1) + 1
    16. If pf.PivotItems(i).Name = vArray(j, 1) Then
    17. pf.PivotItems(pf.PivotItems(i).Name).Visible = True
    18. Exit Do
    19. Else
    20. pf.PivotItems(pf.PivotItems(i).Name).Visible = False
    21. End If
    22. j = j + 1
    23. Loop
    24. Next i
    25. End With
    26. End Sub


    Was mache ich falsch ?
    Wie muss der Code abgeändert werden ?

    Viele liebe Grüße
    Manfred
    Dateien

    Nur bestimmte PivotItems auf Visible setzen

    Hallo INOPIAE,

    die Anbindung erfolgt so:

    Excel
    -> Daten -> Daten abrufen -> aus Datenbank -> aus Analysis Services
    Verbindungsdaten eingeben:
    Servername: xxxxxxxxxx
    Anmeldeinformationen: Windows-Zuigriffsrechte verwenden
    Datenbank xxxxxxxxxx auswählen
    -> Weiter -> Fertigstellen -> OK

    siehe dazu auch folgendes Bild mit Screenshots

    Bilder
    • anbindung_sql.jpg

      171,31 kB, 1.280×720, 39 mal angesehen
    Hallo an alle,

    nach weiterer Internetrecherche bin ich auf ein Beispiel gestoßen, das ich wie folgt abgeändert habe
    und das auch bei mir funktioniert.

    Hinweis: man kann das 'visible' außer acht lassen und einfach die Auswahl der Element mit einem Array
    lösen.

    Visual Basic-Quellcode

    1. Sub Filtern_mit_Array()
    2. ' visible item list
    3. Const CCID = "[Cost].[Cost Center Id]"
    4. Dim STARTZEILE As Integer
    5. Dim ENDZEILE As Integer
    6. Dim CCNUMBER As String
    7. Dim TEST As String
    8. Dim AR
    9. STARTZEILE = 2
    10. ReDim AR(0 To ENDZEILE - 2)
    11. Sheets("Kost_Liste").Select
    12. CCNUMBER = ActiveSheet.Cells(STARTZEILE, 2)
    13. ENDZEILE = ActiveSheet.Cells(Rows.Count, 1).End(xlUp).Row
    14. ' build array
    15. i = 0
    16. For STARTZEILE = 2 To ENDZEILE
    17. CCNUMBER = ActiveSheet.Cells(STARTZEILE, 3)
    18. AR(i) = CCID & ".&[" & CCNUMBER & "]"
    19. i = i + 1
    20. Next
    21. 'Debug.Print Join(ar, vbLf)
    22. Sheets("KoSt-Bericht").Select
    23. ActiveSheet.PivotTables("KoSt-Bericht").PivotFields( _
    24. "[Cost].[Cost Center Id].[Cost Center Id]").VisibleItemsList = AR
    25. End Sub


    Bei Fragen bitte gerne melden.

    Viele Grüße
    Manfred