使用VBA进行Excel切片器操作

我正在学习如何使用VBA创build和操作Excel切片器。 我一直在Paul Te Braack的“商业智能网站: https ://paultebraak.wordpress.com/2012/02/24/accessing-the-slicer-through-vba/

当我尝试循环切片caching的项目并在即时窗口中打印“caption”,“value”和“name”的值时,它将返回“运行时错误”1004错误:应用程序定义或对象定义的错误的行:“这是代码:”Set 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中。 (我认为应该根据下面提到的分割器caching和项目validation来工作。)

当我查看caching在本地窗口中的切片器时,它显示它有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 

任何关于我在做什么错误的原始代码示例或修改后的代码示例的指导将是

SlicerItemLevels仅适用于OLAP数据馈送。 看到这个参考 。

看来,您使用ASCII字符147(“)&148(”)复制代码的网站用于打开和closures引号。 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