Excel Slicer

时间:2015-08-05 08:23:27

标签: excel-vba powerpivot vba excel

我不是IT专业人士,但对Excel VBA的可能性着迷。 在关于课程出勤的KPI仪表板中,我有一个包含课程名称的下拉列表。用户选择一个课程,然后宏必须在切片器(连接到多维数据集)中选择所选课程。使用宏录制器时,我看到录像机使用一种索引来获取用户想要的路线,而不是名称(在我的例子中为& [18]):

ActiveWorkbook.SlicerCaches("Slicer_Course2").VisibleSlicerItemsList = Array("[Course].[Course].&[18]")

所以我想浏览不同的切片器项目,只在我的下拉列表中选择与用户选择相对应的项目,但是要根据课程名称。例如,如果用户选择课程"简介切片器":

Sub TestSclicer()
Dim i

ActiveWorkbook.SlicerCaches("Slicer_Courses2").ClearManualFilter

For i = 1 To ActiveWorkbook.SlicerCaches("Slicer_Courses2").SlicerItems.Count
     If ActiveWorkbook.SlicerCaches("Slicer_Courses2").SlicerItems(i).Name = "Introduction To Slicer" Then
        ActiveWorkbook.SlicerCaches("Slicer_Courses2").SlicerItems(i).Selected = True
    Else
        ActiveWorkbook.SlicerCaches("Slicer_Courses2").SlicerItems(i).Selected = False
    End If
Next
End Sub

它会在ActiveWorkbook.SlicerCaches("Slicer_Courses2").SlicerItems.Count上发布错误消息application-defined of object-defined error

欢迎任何想法!

1 个答案:

答案 0 :(得分:5)

好的,我认为根据这个reference 你不能直接从SlicerCaches 获得SlicerItems。

所以,你得到了错误。在这里我的建议,请尝试如下:

Sub TestSclicer()

Dim sC As SlicerCache
Dim sI As SlicerItem
Dim index As Integer

Set sC = ActiveWorkbook.SlicerCaches("Slicer_Courses2")

sC.ClearManualFilter

For index = 1 To sC.SlicerCacheLevels.count

    For Each sI In sC.SlicerCacheLevels(index).SlicerItems

        If sI.Name = "Introduction To Slicer" Then
            sI.Selected = True
        Else
            sI.Selected = False
        End If

    Next sI

Next index 

End Sub