/ / Wie man Slicer-Cache mit VBA aktualisiert - Excel, VBA, Excel-VBA, Slicer

Wie man Slicer-Cache mit VBA aktualisiert - Excel, VBA, Excel-VBA, Slicer

Ich benutze Excel VBA, um Elemente auf Slicer je nach Benutzerauswahl zu verstecken / zu zeigen.

Ich habe den folgenden Code:

 Private Sub removeFilterWithSlicer()

Dim slicerCache As slicerCache

Set slicerCache = ThisWorkbook.SlicerCaches("Slicer_Channel1")

slicerCache.SlicerItems("A").Selected = False
slicerCache.SlicerItems("B").Selected = False
slicerCache.SlicerItems("C").Selected = False
slicerCache.SlicerItems("D").Selected = False
slicerCache.SlicerItems("E").Selected = False
slicerCache.SlicerItems("F").Selected = False

End Sub

wo A, B usw. sind Namen von Elementen in Slicer. Ich habe den Namen des Slicer-Caches überprüft ("Slicer_Channel1"). Das Problem ist, dass die Elemente nicht wie gewünscht abgewählt werden. Wenn ich den Code debugge, habe ich festgestellt, dass jedes Element einzeln abgewählt wird, aber sobald ich das Ende der Prozedur erreiche, d. H. End-Sub, gelangen alle zurück in den ausgewählten Zustand.

Irgendwelche Zeiger?

Antworten:

1 für die Antwort № 1

Dieser Code zeigt, wie ein Slicer in einem Array namens vSelection gefiltert wird.

Option Explicit

Sub FilterSlicer()
Dim slr As Slicer
Dim sc As SlicerCache
Dim si As SlicerItem
Dim i As Long
Dim vItem As Variant
Dim vSelection As Variant

Set sc = ActiveWorkbook.SlicerCaches("Slicer_ID")
"Set sc = slr.SlicerCache

vSelection = Array("B", "C", "E")

For Each pt In sc.PivotTables
pt.ManualUpdate = True "Stops PivotTable from refreshing after each PivotItem is changed
Next pt

With sc

"At least one item must remain visible in the Slicer at all times, so make the first
"item visible, and at the end of the routine, check if it actually  *should* be visible
.SlicerItems(1).Selected = True

"Hide any other items that aren"t already hidden.
"Note that it is far quicker to check the status than to change it.
" So only hide each item if it isn"t already hidden
For i = 2 To .SlicerItems.Count
If .SlicerItems(i).Selected Then .SlicerItems(i).Selected = False
Next i

"Make the PivotItems of interest visible
On Error Resume Next "In case one of the items isn"t found
For Each vItem In vSelection
.SlicerItems(vItem).Selected = True
Next vItem
On Error GoTo 0

"Hide the first PivotItem, unless it is one of the countries of interest
On Error Resume Next
If InStr(UCase(Join(vSelection, "|")), UCase(.SlicerItems(1).Name)) = 0 Then .SlicerItems(1).Selected = False
If Err.Number <> 0 Then
.ClearAllFilters
MsgBox Title:="No Items Found", Prompt:="None of the desired items was found in the Slicer, so I have cleared the filter"
End If
On Error GoTo 0
End With


For Each pt In sc.PivotTables
pt.ManualUpdate = False
Next pt

End Sub

0 für die Antwort № 2

Mindestens eine muss ausgewählt sein. funktioniert bei der Auswahl mit der Maus genauso. Sie können nicht alle auswählen