使用VBA循环切片器项

时间:2014-02-19 15:22:13

标签: vba pivot

我想循环选择一定范围内的所有切片器项。让我们说一下,从36的所有项目。我的切片器包含以下项1 , 2, 3, 5, 6, 8

这是我试过的

Sub SlicerTest()

With ActiveWorkbook.SlicerCaches("Slicer_rtytr")

    Dim maxNumberOfDays As Long
    maxNumberOfDays = 9    'I want to be able to identify the number of items programmatically but do not know how to do this     
    Dim fromDay As Long
    fromDay = 3

    Dim toDay As Long
    toDay = 6            

    For i = 1 To maxNumberOfDays

        If (i > fromDay And i < toDay) Then
            .SlicerItems(CStr(i)).Selected = True
        Else
            .SlicerItems(CStr(i)).Selected = False
        End If    
     Next i

End With

End Sub

结果应该是切片器仅选择5但它会引发错误。我尝试了一个常规的1,2,3,4,5,6,7,8数组,它运行正常。我猜这个因为错过了价值而无效?

2 个答案:

答案 0 :(得分:2)

本文解释了您的需求和一些内容。

https://paultebraak.wordpress.com/2012/02/24/accessing-the-slicer-through-vba/

相关位:

Dim sC As SlicerCache
Dim SL As SlicerCacheLevel
Dim sI As SlicerItem

Set sC = ActiveWorkbook.SlicerCaches(“Slicer_Dates_Hie”)
Set SL = sC.SlicerCacheLevels(1)

Debug.Print “——————————————————————————“

For Each sI In SL.SlicerItems

    Debug.Print “Caption –> ” & sI.Caption
    Debug.Print “Value –> ” + CStr(sI.Value)
    Debug.Print “Unique Name –> ” + sI.Name
    Debug.Print “——————————————————————————“

Next

答案 1 :(得分:1)

正常数组工作的原因(在此上下文中正常被量化为包含数组中的9个元素)是因为您指定要在此行For i = 1 To maxNumberOfDays中从1到9循环。在您的示例中,您只有6个项目,因此您尝试访问的项目数量超过当前数组中的项目时会出现错误。

不幸的是,我不太熟悉切片器对象,但是,为了解决这个问题,你需要确切知道切片器中有多少项。快速查看silcers上的文档后,似乎没有count属性,但是,有一个numberOfColumns属性。如果列号与您拥有的对象数量相关(再次不完全确定它有),则只需指定:

maxNumberOfDays = ActiveWorkbook.SlicerCaches("Slicer_rtytr").numberOfColumns

如果这不起作用,我会探索其他选项,以确定阵列中的元素数量。