Aggiungi selezioni di affettatrici al foglio in un elenco - VBA di Excel


0

Ho una tabella pivot con un filtro che un utente può effettuare selezioni multiple. Sto cercando di elencare i valori selezionati nell'affettatrice in modo che possano essere uniti in un'altra cella utilizzando CONCATENATE. Sto usando il codice qui sotto.

Al momento, le celle L5: L7 vengono popolate con la prima selezione effettuata nell'affettatrice, ma non altre.

Ho fatto qualche ricerca e ho trovato una soluzione possibile con la funzione CUBESET, ma non riesco a farlo funzionare nel mio foglio di calcolo. Da qui il tentativo VBA. Qualcuno sa cosa c'è di sbagliato in esso?

    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

Risposte:


0

Ecco una funzione definita dall'utente che puoi chiamare direttamente dalla cartella di lavoro che fa questo per te e che può essere eseguita su qualsiasi tipo di Slicer, che si tratti di una tabella pivot "tradizionale", una tabella pivot OLAP / PowerPivot o una tabella. Basta inserire questo in un modulo di codice standard, quindi nella cartella di lavoro digitare quanto segue:

= SlicerItems ( "Slicer_City")

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

Ed ecco come appare:

enter image description here


Freddo. Ho dimenticato di dire che c'è un secondo argomento opzionale che specifica il delimitatore da usare. Il valore predefinito è il carattere pipe | ma puoi specificare altri come una virgola.
jeffreyweir
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.