2016-04-15 12 views
5

Ho un'affettatrice denominata "Slicer_HeaderTitle". Devo semplicemente essere in grado di attenuare una variabile in VBA con il valore dell'elemento selezionato. Avrò un solo elemento alla volta.Excel VBA - Restituisce l'elemento selezionato nell'affettatrice

Ho avuto un sacco di problemi con la selezione e la deselezione degli elementi dal mio slicer in modo dinamico tramite VBA, poiché la mia tabella pivot è collegata a un'origine dati esterna. Non so se questo è rilevante per questo esatto esempio, ma questa tabella è connessa alla stessa origine dati esterna.

Avevo una sola riga di codice, che poteva restituire questo valore, ma tutto ciò che ho trovato ora richiede di scorrere ogni elemento nell'affettatrice e controllare se è selezionato o meno. Spero di evitarlo, visto che ho solo 1 elemento selezionato alla volta.

enter image description here

' This is what I'm trying to achieve. 
Dim sValue as String 
sValue = ActiveWorkbook.SlicerCaches("Slicer_HeaderTitle").VisibleSlicerItems.Value 

msgbox(sValue) 
'Returns: "Uge 14 - 2016 (3. Apr - 9. Apr)" 

Stato corrente:

enter image description here

risposta

1

Ok per trovare l'errore, faremo un passo indietro, cancellare la mia funzione e cercare Looping attraverso le voci:

Dim sC As SlicerCache 
Dim SL As SlicerCacheLevel 
Dim sI As SlicerItem 
Set sC = ActiveWorkbook.SlicerCaches("Slicer_Dates_Hie") 
Set SL = sC.SlicerCacheLevels(1) 
For Each sI In SL.SlicerItems  
    sC.VisibleSlicerItemsList = Array(sI.Name) 
Next 
+0

Grazie per la risposta dettagliata. Ho un piccolo problema. Continuo a ricevere il messaggio "Nessun elemento selezionato". – TobiasKnudsen

+0

che non è molto utile, aggiungi un debug.print osi.Name dopo il Per ognuno e controlla se ogni elemento che hai nell'affettatrice è lì, quindi controlla se quello selezionato ha selezionato = vero o no. –

+0

Ho aggiunto un'immagine del mio codice e un errore nella parte inferiore del post originale! – TobiasKnudsen

2

Questo è quello che ho fatto:

Public Function GetSelectedSlicerItems(SlicerName As String) As String 
Dim SL As SlicerCacheLevel 
Dim sI As SlicerItem 

Set SL = ActiveWorkbook.SlicerCaches(SlicerName).SlicerCacheLevels(1) 
For Each sI In SL.SlicerItems 
    If sI.Selected = True Then 
     GetSelectedSlicerItems = (sI.Value) 
    End If 
Next 
End Function 


Dim sValue As String 
sValue = GetSelectedSlicerItems("Slicer_HeaderTitle") 

Grazie a Doktor Oswaldo per avermi aiutato un sacco!