Excel VBA 2010 – 模仿用户切片机交互

从检查不同的网站,唯一已知(?)的方式来从切片器中select一个项目是通过迭代项目数组来取消select所有其他人。 当用户点击一个未经过滤的切片器时,它会立即忽略所有其他项目 – 有没有办法用VBA来模仿这种行为(取消select除了被点击的项目之外的所有内容)? 具体而言,要过滤的项目数量太长,即使closures计算也需要花费很长时间来进行迭代。

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做到这一点,我正在做一个“钻入”macros,在那里我可以点击一个单元格(这是一个公式的结果,而不是一个数据透视表单元格),它会带我到适当的选项卡,并根据需要调整切片器,以显示数字来自哪里。

唯一可能的方法是要求用户这样做(只select一个),然后按需要循环。 如下所示:

 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 

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

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

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