【问题标题】:VBA to move through slicer one by oneVBA一个一个地通过切片器
【发布时间】:2019-06-19 08:21:27
【问题描述】:

我有一张包含原始数据的表格。我想编写一个宏,该宏将使用标题引擎编号创建一个拼接器,然后选择切片器#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

【问题讨论】:

    标签: excel vba


    【解决方案1】:

    做这样的事情

    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 的内部机制,用于跟踪哪些数据属于哪个切片。

    【讨论】:

    • 感谢您的回答!这对我帮助很大。我有一个问题,现在如果我想在运行切片器之前添加一些过滤器,我是否要创建一个新的子并将其放在option explicit 之前?我是否将msgbox 替换为我需要在切片机之间执行的任务的代码?
    • 是的,将 MsgBox 替换为您想要对每个切片执行的操作。是否为此创建一个新的 sub 或者是否放入循环中取决于您。如果您创建了一个 sub,您已经隔离了该部分,您可以单独对其进行测试。 Sub 可以放在任何地方,只要它位于其他 Subs 和 Functions 之间 - 而不是在它们内部。
    猜你喜欢
    • 1970-01-01
    • 2021-02-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-05-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多