我想循环选择一定范围内的所有切片器项。让我们说一下,从3
到6
的所有项目。我的切片器包含以下项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
数组,它运行正常。我猜这个因为错过了价值而无效?
答案 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
如果这不起作用,我会探索其他选项,以确定阵列中的元素数量。