excel - Excel Slicer 的应用程序定义或对象定义错误

标签 excel vba powerpivot

在有关类(class)出勤的 KPI 仪表板中,我有一个包含类(class)名称的下拉列表。用户选择类(class),宏必须在切片器(连接到多维数据集)中选择所选类(class)。

使用宏录制器时,我看到录制器使用一种索引来选取用户想要的类(class),而不是名称(在我的示例中为 &[18]):

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

我想浏览不同的切片器项目,并仅选择与下拉列表中用户的选择相对应的项目,但基于类(class)名称。例如,如果用户选择类(class)“切片机简介”:

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

最佳答案

好吧,我认为你不能根据这个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

关于excel - Excel Slicer 的应用程序定义或对象定义错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31827145/

相关文章:

xml - 如何将多个 XML 中的值提取到 Excel 中?

excel-2013 - PowerPivot DAX 文本窗口函数可在组中重复值

excel - 带参数的 Power 查询和存储过程

c# - Excel 互操作阻止显示密码对话框

excel - 在 Excel VBA 中将文本框中的字符串格式化为 TimeValue

excel - 尝试从推文中提取坐标[Excel 中字符串的子字符串]

java - 如何在java中将两个不同的excel文件连接为同一服务器上的数据库?

vba - 宏返回#REF!在excel中

vba - 尝试使用 Range.Formula 属性时格式错误的 VLookup 公式