Excel VBA 2010 - 模仿用户切片器交互

时间:2017-04-26 17:01:53

标签: excel vba excel-2010

通过检查各个站点,从切片器中选择一个项目的唯一已知(?)方法是通过迭代项目数组来取消选择所有其他项目。当用户点击未过滤的切片器时,它会立即选择所有其他项目 - 有没有办法模仿VBA的这种行为(取消选择除点击项目以外的所有项目)?具体来说,过滤的项目数量太长,即使计算结束,也需要花费很长时间才能进行迭代。

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做这个,我正在制作一个“钻入”宏,我可以点击一个单元格(这是一个公式的结果,而不是一个数据透视表单元格),然后它会转到相应的标签页并根据需要调整切片器以显示该数字的来源。

2 个答案:

答案 0 :(得分: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

如您所见,它是一个“手动过滤器”;据我所知,除了要求用户为你做这件事之外,没有办法让它自动化。

答案 1 :(得分:0)

解决方案是直接使用数据透视表:

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