我正在学习如何使用VBA创建和操作Excel切片器。我一直关注Paul Te Braack在他的“商业智能网站:https://paultebraak.wordpress.com/2012/02/24/accessing-the-slicer-through-vba/
上的一些例子当我尝试循环切片器缓存的项目并在即时窗口中打印“caption”,“value”和“name”的值时,它返回错误“运行时错误'1004':该行的应用程序定义或对象定义错误:“这是代码:”设置SL = sC.SlicerCacheLevels(1)“
Sub BTest()
Dim sC As SlicerCache
Dim SL As SlicerCacheLevel
Dim sI As SlicerItem
application.EnableEvents = False
application.Calculation = xlManual
Set sC = ActiveWorkbook.SlicerCaches(5)
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
application.EnableEvents = True
application.Calculation = xlCalculationAutomatic
End Sub
我修改了代码,但修改后的代码返回结果“False”,“False”,并返回“Sheet5False”。顺便说一下,数据透视表和切片器在Sheet5中。 (我认为应该根据下面提到的切片器缓存和项目验证工作。)
当我查看在本地窗口中缓存的切片器时,它显示它有30个项目,我可以展开项目并显示标题,值和名称的值。
当我在立即窗口中键入“Debug.Print sC.SlicerItems.Count”时,它返回30的答案。当我在立即窗口中键入“Debug.Print sC.SlicerItems(2).Name”时,它返回答案30。
修改后的代码是:
Sub CTest()
Dim sC As SlicerCache
Dim SL As SlicerCacheLevel
Dim sI As SlicerItem
application.EnableEvents = False
application.Calculation = xlManual
Set sC = ActiveWorkbook.SlicerCaches(5)
Set sI = sC.SlicerItems(1)
Debug.Print “——————————————————————————”
For Each sI In sC.SlicerItems
Debug.Print “Caption; – > ” & sI.Caption
Debug.Print “Value; – > ” + CStr(sI.Value)
Debug.Print “Unique; Name; – > ” + sI.Name
Debug.Print “——————————————————————————”
Next
application.EnableEvents = True
application.Calculation = xlCalculationAutomatic
End Sub
有关我在原始代码示例或修改后的代码示例中出错的指导将是
答案 0 :(得分:1)
SlicerItemLevels仅适用于OLAP数据Feed。请参阅此reference。
似乎您使用的ASCII字符147(“)&amp ;; 148(“)用于打开和关闭报价。 VBA期望两者的ASCII字符34(“)。以下应该可以正常工作。
Sub CTest()
Dim sC As SlicerCache
Dim SL As SlicerCacheLevel
Dim sI As SlicerItem
Application.EnableEvents = False
Application.Calculation = xlManual
Set sC = ActiveWorkbook.SlicerCaches(5)
Set sI = sC.SlicerItems(1)
Debug.Print "——————————————————————————"
For Each sI In sC.SlicerItems
Debug.Print "Caption; – > " & sI.Caption
Debug.Print "Value; – > " + CStr(sI.Value)
Debug.Print "Unique; Name; – > " + sI.Name
Debug.Print "——————————————————————————"
Next
Application.EnableEvents = True
Application.Calculation = xlCalculationAutomatic
End Sub