我一直在研究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.
我一直在尝试调试超过一个小时,但我无法弄清楚原因。它可能是基本的东西,但是,请你帮我确定我的代码可能有什么问题?
答案 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