Slicer-Auswahlen zu einem Blatt in einer Liste hinzufügen – Excel VBA

Slicer-Auswahlen zu einem Blatt in einer Liste hinzufügen – Excel VBA

Ich habe eine Pivot-Tabelle mit einem Slicer, in dem ein Benutzer mehrere Auswahlen treffen kann. Ich versuche, die ausgewählten Werte im Slicer aufzulisten, damit sie dann mit CONCATENATE in einer anderen Zelle zusammengeführt werden können. Ich verwende den folgenden Code.

Derzeit werden die Zellen L5:L7 mit der ersten im Slicer getroffenen Auswahl gefüllt, aber nicht mit anderen.

Ich habe ein bisschen recherchiert und eine mögliche Lösung mit der CUBESET-Funktion gefunden, aber ich kann sie in meiner Tabelle nicht zum Laufen bringen. Daher der VBA-Versuch. Weiß jemand, was daran falsch ist?

    Sub City_Click()

Dim cache As Excel.SlicerCache
Set cache = ActiveWorkbook.SlicerCaches("Slicer_City")
Dim sItem As Excel.SlicerItem
For Each sItem In cache.SlicerItems

If sItem.Selected = True Then Range("L5").Value = sItem.Name
If sItem.Selected = True Then Range("L6").Value = sItem.Name
If sItem.Selected = True Then Range("L7").Value = sItem.Name

Next sItem

End Sub

Antwort1

Hier ist eine benutzerdefinierte Funktion, die Sie direkt aus der Arbeitsmappe aufrufen können und die dies für Sie erledigt. Sie kann auf jedem Slicer-Typ ausgeführt werden, sei es eine „herkömmliche“ PivotTable, eine OLAP/PowerPivot-PivotTable oder ein Tabellen-Slicer. Fügen Sie dies einfach in ein Standardcodemodul ein und geben Sie dann in der Arbeitsmappe Folgendes ein:

=SlicerItems("Slicer_Stadt")

Public Function SlicerItems(SlicerName As String, Optional sDelimiter As String = "|") As String

    Dim oSc As SlicerCache
    Dim oSi As SlicerItem
    Dim i As Long
    Dim lVisible As Long
    Dim sVisible() As String

    On Error Resume Next
    Application.Volatile
    Set oSc = ThisWorkbook.SlicerCaches(SlicerName)
    If Not oSc Is Nothing Then
        With oSc
            If .FilterCleared Then
                SlicerItems = "(All)"
            Else
                If .OLAP Then
                    SlicerItems = Join(.VisibleSlicerItemsList, sDelimiter)
                    SlicerItems = Replace(SlicerItems, .SourceName, "")
                    SlicerItems = Replace(SlicerItems, ".&[", "")
                    SlicerItems = Replace(SlicerItems, "]", "")
                Else

                    lVisible = .VisibleSlicerItems.Count
                    If .VisibleSlicerItems.Count = 1 Then
                        SlicerItems = .VisibleSlicerItems(1).Name
                    Else
                        ReDim sVisible(1 To lVisible)
                        For i = 1 To lVisible
                            sVisible(i) = .VisibleSlicerItems(i).Name
                        Next i
                        SlicerItems = Join(sVisible, sDelimiter)
                    End If
                End If
            End If
        End With
    Else
        SlicerItems = SlicerName & " not found!"
    End If

End Function

Und so sieht es aus:

Bildbeschreibung hier eingeben

verwandte Informationen