2017-04-26 248 views
1

从检查各个网站时,从切片器中选择一个项目的唯一已知(?)方法是通过迭代项目数组来取消选择所有其他人。当用户点击一个未过滤的切片器时,它会立即忽略所有其他项目 - 有没有一种方法可以用VBA来模仿这种行为(取消选择除点击项目之外的所有内容)?特别是,要过滤的项目数量太长,并且需要花费很长时间才能遍历,即使关闭了计算。Excel VBA 2010-模仿用户切片器交互

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 

编辑:澄清为什么我想用VBA做到这一点,我做的宏,在那里我可以点击一个单元格了“钻”(这是一个公式,而不是一个支点的结果表格单元格),它会带我到适当的选项卡并根据需要调整切片器以显示该数字来自哪里。

+1

我的建议是不用担心奇downvote。但是,如果它影响到您,请添加评论,而不是添加投票评论到您的文章 - 它不属于那里。谢谢! – halfer

回答

0

的解决方案是直接与数据透视表的工作:

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

唯一可能的方法是要求用户这样做(只选择一个),然后按照您的意愿循环访问其他人。像下面这样:

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 

正如你所看到的,它是一个“手动过滤器”。据我所知,除了要求用户为你做之外,没有办法自动化它。