2017-04-26 5 views
1

Von der Überprüfung verschiedener Sites ist die einzige bekannte (?) Möglichkeit, ein Element aus einem Slicer auszuwählen, die Abwahl aller anderen durch die Iteration durch das Array von Elementen. Wenn ein Benutzer auf einen ungefilterten Slicer klickt, werden sofort alle anderen Elemente abgewählt. Gibt es eine Möglichkeit, dieses Verhalten mit VBA nachzuahmen (alle abwählen außer dem angeklickten Element)? Insbesondere ist die Anzahl der zu filternden Elemente zu lang und es dauert zu lange, um selbst bei deaktivierten Berechnungen zu iterieren.Excel VBA 2010 - Benutzerschnittstelleninteraktion nachahmen

ActiveWorkbook.SlicerCaches("Slicer_A").ClearManualFilter 

With ActiveWorkbook.SlicerCaches("Slicer_A") 
    For i = 1 To .SlicerItems.Count 
     If .SlicerItems(i).Caption = Target.Value Then 
     Else 
     .SlicerItems(i).Selected = False 
     End If 
    Next i 
End With 

Edit: Um zu klären, warum ich das mit VBA tun bin zu wollen, ich mache einen „drill in“ Makro, wo ich auf einer Zelle klicken kann (das ist das Ergebnis einer Formel, keinen Schwenk Tabellenzelle), und es wird mich auf die entsprechende Registerkarte führen und die Slicer nach Bedarf anpassen, um zu zeigen, wo diese Nummer herkommt.

+1

Mein Rat ist, um die ungerade downvote keine Sorgen zu machen. Wenn es Sie jedoch stört, fügen Sie einen Kommentar hinzu, anstatt einen Kommentar zu Ihrem Beitrag hinzuzufügen - er gehört nicht dorthin. Vielen Dank! – halfer

Antwort

0

Die Lösung ist mit der Pivot-Tabelle direkt zu arbeiten:

ActiveSheet.PivotTables("PivotTable1").PivotFields("FIELD").CurrentPage = Target.Value 
0

Die einzige Möglichkeit besteht darin, einen Benutzer dazu aufzufordern (wählen Sie nur einen) und dann die anderen wie gewünscht durchzulaufen. Etwas wie unten:

Public Sub SlicerLoop() 

Dim sC As SlicerCache 
Set sC = ActiveWorkbook.SlicerCaches("Slicer_Store_Number") 

    'This reminds the user to only select the first slicer item: 
    If sC.VisibleSlicerItems.Count <> 1 Or sC.SlicerItems(1).Selected = False Then 
     MsgBox "Please Only Select First Slicer Item" 
     Exit Sub 
    End If  

    For i = 1 To sC.SlicerItems.Count 

    'Do not clear filter (sC.ClearManualFilter) as it causes to select all of the items 

    sC.SlicerItems(i).Selected = True 

    'This deslect the item from previous step: 
    If i > 1 Then sC.SlicerItems(i - 1).Selected = False 


    Debug.Print sI.Name 'Do what you want for SlicerItem(i) 

    Next i 

End Sub 

Wie Sie sehen, ist es ein "manueller Filter"; und soweit ich weiß, gibt es keine Möglichkeit, es zu automatisieren, außer den Benutzer zu bitten, es für Sie zu tun.

Verwandte Themen