VBA一一通过切片器

时间:2019-06-19 08:21:27

标签: excel vba

我有一张原始数据表。我想对一个宏进行编码,该宏将创建带有标题Engine No.的拼接器,然后选择切片器#1,然后将数据中可见的所有数据复制到另一张纸上。连续地,移至切片器2,并重复将过滤后的数据复制到另一张纸上的步骤。

这是我从宏记录器中得到的。这不是我可以使用的,因为新数据表中的数字将有所不同。我当时正在考虑使用循环。除了循环以外,还有其他更好的方法吗?我需要将显示的内容复制到每个切片器项目的另一张纸上。

我也看到了SlicerItemsSlicerCache,但我不知道它们是什么。有人可以给我解释一下吗?

Sub slicer()

With ActiveWorkbook.SlicerCaches("Slicer_Engine_S_N.")
    .SlicerItems("123456").Selected = True
    .SlicerItems("123441").Selected = False
    .SlicerItems("123123").Selected = False
    .SlicerItems("235455").Selected = False
    .SlicerItems("566346").Selected = False
End With

1 个答案:

答案 0 :(得分:0)

做这样的事情

Option Explicit

Sub IterateSlices()
    Dim CurrentSlice As Integer
    For CurrentSlice = 1 To 3
        SelectOnly ActiveWorkbook.SlicerCaches("Slicer_Engine_S_N."), CurrentSlice
        MsgBox "Do Something here"
    Next
End Sub

Sub SelectOnly(Slicer As SlicerCache, SliceNo As Integer)
    Dim i As Integer
    ' Force at least one to be selected before start
    Slicer.SlicerItems(Slicer.SlicerItems.Count).Selected = True

    For i = 1 To Slicer.SlicerItems.Count
        Debug.Print (SliceNo = i)
        Slicer.SlicerItems(i).Selected = (SliceNo = i)
    Next i
End Sub

最后一个方法是选择第n个SliceItem的实用程序方法。使用索引号比使用名称更容易。它们始终以数字1开头,以切片数结尾。

第一种方法一次拾取一个切片。

SlicerCache是​​Excel的内部机制,用于跟踪属于哪个切片的数据。