Microsoft Excel

Herbers Excel/VBA-Archiv

Informationen und Beispiele zum Thema MsgBox
BildScreenshot zu MsgBox MsgBox-Seite mit Beispielarbeitsmappe aufrufen

Code ändern Berichtsfilter lesen Power Pivot

Betrifft: Code ändern Berichtsfilter lesen Power Pivot von: Johann
Geschrieben am: 08.08.2014 14:17:37

Hallo zusammen,

ich stehe mal wieder vor einem Problem mit einem Makro und hoffe, dass ihr mir auch diesmal helfen könnt.

Ich habe folgenden Code getest, der für eine "normale" Pivot Tabelle funktioniert. Das Makro liest den Berichtsfilterinhalt (in diesem Fall existiert nur einer) und schreibt ihn ein ein anderes Tabellenblatt. In A1 steht der Name des Feldes und darunter der Inhalt.

Sub Get_Current_PageFilters_OnePageField()
    Dim PT As PivotTable
    Dim sArray() As String
    Dim i As Long
    On Error Resume Next
    
    Set PT = Worksheets("PivotData").Range("A1").PivotTable

    If PT.PageFields.Count < 1 Then
        MsgBox "There are no PageFields in this Pivot Table"
        Exit Sub
    End If
    
    With PT.PageFields(1)
        '---store field name in sArray(0)
        ReDim sArray(0)
        sArray(0) = .Name
        If .EnableMultiplePageItems Then
            '---store visible items in sArray(1) and up
            For i = 1 To .PivotItems.Count
                If .PivotItems(i).Visible Then
                    ReDim Preserve sArray(UBound(sArray) + 1)
                    sArray(UBound(sArray)) = .PivotItems(i)
                End If
            Next i
        Else
            ReDim Preserve sArray(UBound(sArray) + 1)
            sArray(UBound(sArray)) = .CurrentPage
        End If
    End With
    
    '---display results in Immediate Window
    For i = 0 To UBound(sArray)
        'Debug.Print sArray(i)
        Worksheets("Filter").Range("A" & i + 1).Value = sArray(i)
    Next i
End Sub
Wenn ich ihn auf meine PT anwenden will, die sich die Daten aus einem Power Pivot Datenmodell zieht, wird folgendes in Feld A1 angezeigt: [Pivot_MerO_DataImport].[Decided Year].[Decided Year]

Der Inhalt der esten Klammer ist der Name der Tabelle im Datenmodell. Der Inhalt der anderen ist der Name des Seitenfelds bzw. des Berichtsfilters. Der Inhalt sollte nun darunter stehen. Tut er aber nicht.

Kennt sich jemand mit diesem Problem aus und weiß,wie ich den Code ändern müsste?

Viele Grüße
Johann

  

Betrifft: AW: Code ändern Berichtsfilter lesen Power Pivot von: fcs
Geschrieben am: 09.08.2014 15:35:34

Hallo Johann,

ich hab jetzt mal mit PowerPivot gearbeit.
PoerPivot kreiert scheinbar einen OLAP-Cube als Datenwuelle für den Pivotbericht. Da gelten etwas andere Regeln, auch wenn es optisch kaum Unterschiede gibt. Nachfolgend ein Beispiel wie man es umsetzen könnte.

Gruß
Franz

'Anwendung bei Pivot-Tabellenberichten mit OLAP-Cube-Datenquelle
Private Sub Worksheet_PivotTableUpdate(ByVal Target As PivotTable)
    Dim pvField As PivotField, intV, intZeile As Integer, intSpalte As Integer, _
        pvItem As Variant, strItem As String, Zelle0 As Range
    With Me
        Set Zelle0 = Me.Range("F2") 'Startzelle für das Eintragen der Werte
        If Zelle0 <> "" Then Zelle0.CurrentRegion.ClearContents
        'Alle slektierten Elemente der >Berichtsfelder in den rechten Nachbarzellen anzeigen
        intSpalte = 0
        For Each pvField In Target.PageFields
            intZeile = 0
            'Pivot-Feldname (ohne vorangestellte Elemente der Datenquelle
            strItem = pvField.Name
            strItem = Mid(strItem, InStrRev(strItem, ".[") + 2)
            strItem = Left(strItem, Len(strItem) - 1)
            Zelle0.Offset(intZeile, intSpalte).Value = strItem
            If pvField.DataRange.Text = "All" Then
                'Alle Elemente sind gewählt
                intZeile = intZeile + 1
                Zelle0.Offset(intZeile, intSpalte).Value = "(Alle)"
            ElseIf pvField.VisibleItemsList(1) = "" Then
                'Ein einzelnes Element ist selektiert - mehrfachselektion ist deaktiviert
                intZeile = intZeile + 1
                Zelle0.Offset(intZeile, intSpalte).Value = pvField.DataRange.Text
            Else
                'Mehrfachselektion ist aktiviert
                For Each pvItem In pvField.VisibleItemsList
                   'Pivot-Item (ohne vorangestellte Elemente der Datenquelle)
                   strItem = pvItem
                    strItem = Mid(strItem, InStr(1, strItem, "&") + 2)
                    strItem = Left(strItem, Len(strItem) - 1)
                    intZeile = intZeile + 1
                    Zelle0.Offset(intZeile, intSpalte).Value = strItem
                Next
            End If
            intSpalte = intSpalte + 1
        Next
    End With
End Sub



  

Betrifft: Hammerstark! Tausend Dank!!! von: Johann
Geschrieben am: 12.08.2014 16:17:51

VG
Johann


 

Beiträge aus den Excel-Beispielen zum Thema "Code ändern Berichtsfilter lesen Power Pivot"