无法将VBA Slicer选定的属性值设置为False

时间:2016-12-01 17:58:02

标签: excel vba excel-vba

我一直在研究Excel和VBA,我试图弄清楚如何从切片器中取消选择各种字段,只选择少数几个。 我尝试读取切片器缓存,然后迭代切片器中的各种项目。我能够读取切片器中项目的值,但我无法取消选择它们。它不断抛出应用程序定义或对象定义的错误"错误代码1004.

我正在分享我遇到困难的代码片段。

Sub SelectFiscalWeeks()

Dim slcCache As SlicerCache
Dim slcItem As SlicerItem

FalseVar = False
Application.StatusBar = "Filtering out last 13 Week's Data"

Set slcCache = ThisWorkbook.SlicerCaches("Slicer_Date.Fiscal_Week")

slcCache.ClearManualFilter

For Index = 1 To slcCache.SlicerCacheLevels.Count
    Worksheets("A").Cells(Index + 1, "N").Value = Index

    j = 0
    For Each slcItem In slcCache.SlicerCacheLevels(Index).SlicerItems
        Worksheets("A").Cells(j + 1, "P").Value = slcItem.Name
        j = j + 1
        slcItem.Selected = FalseVar
    Next
Next

'Set slcCache.VisibleSlicerItems = Array("[DT].[FW].&[201701]")

Set slcCache = Nothing
Application.StatusBar = False

End Sub

在上面的代码中,我可以使用slcItem.Name读取切片器项名称,但我无法执行以下任一语句:

slcItem.Selected = FalseVar
Set slcCache.VisibleSlicerItems = Array("[DT].[FW].&[201701]")

执行这些语句会引发错误"应用程序定义的错误或对象定义的错误"错误代码1004.

我一直在尝试调试超过一个小时,但我无法弄清楚原因。它可能是基本的东西,但是,请你帮我确定我的代码可能有什么问题?

1 个答案:

答案 0 :(得分:2)

是的,我已经调试了几个小时,遇到了同样的问题。 最后我发现我应该使用VisibleSlicerItems而不是将.selected设置为true / false。

尝试不带Set的slcCache.VisibleSlicerItems = Array(“[DT]。[FW]。& [201701]”)。

以下是我的代码示例。 希望可以帮助你。

Option Explicit

Sub Test()
Dim sc As SlicerCache
Dim si As SlicerItem
Dim list As Variant


Set sc = ActiveWorkbook.SlicerCaches("Slicer_product_name")

    For Each si In sc.SlicerCacheLevels(1).SlicerItems
        If InStr(si.Value, "Boxers") > 0 Then
            'this if loop creates an Array for VisibleSlicerItems
            If IsEmpty(list) Then
                list = Array(si.Name)
            Else
                ReDim Preserve list(UBound(list) + 1)
                list(UBound(list)) = si.Name
            End If
        End If
    Next

sc.VisibleSlicerItemsList = list

End Sub