我需要通过VBA为今天的日期选择切片器项目。我尝试了两种方法:
使用SlicerItems方法,但SlicerItems会导致
运行时错误'1004':应用程序定义或对象定义错误
错误消息,即使我使用最简单的版本:
ActiveWorkbook.SlicerCaches(1).SlicerItems(1).Selected = True
我已尽力尝试了各种变体,包括按名称指定缓存,但我总是得到同样的错误。
我录制了一个宏,它生成一条运行的行,并选择特定的切片器项:
ActiveWorkbook.SlicerCaches("<NAME>").VisibleSlicerItemsList = Array("[VCC IntervalDate].[Hierarchy].[Year Number].&[2015].&[October].&[2015-10-13T00:00:00]")
然后我可以使用变量来修改数组中的[2015]和[October]值,并获得成功的结果。但是我无法使用变量修改[2015-10-13T00:00:00]。它返回OLAP错误。
如果我手动将该值修改为我需要的日期,并且它与通过变量设置的年/月值匹配,则可以正常工作:
ActiveWorkbook.SlicerCaches("Slicer_VCC_IntervalDate.Hierarchy").VisibleSlicerItemsList = Array("[VCC IntervalDate].[Hierarchy].[Year Number].&[" & Year(d) & "].&[" & Month(d) & "].&[2015-10-14T00:00:00]")
我已验证变量的格式输出正确的格式以匹配2015-10-14T00:00:00
,但它不接受它。我还尝试仅修改日期部分并手动输入T00:00:00
部分,但这也不起作用。
所以我正式感到难过并欢迎任何帮助。
答案 0 :(得分:0)
选择单个切片器项目与您的预期相反。您无需选择今天,而是取消选择所有其他日期。
尝试使用此代码。 将“Slicer_Date”替换为您的缓存名称,并更改日期格式以匹配您的数据。
Dim i As Integer
For i = 1 To ActiveWorkbook.SlicerCaches("Slicer_Date").SlicerItems.Count 'looping through all items
If ActiveWorkbook.SlicerCaches("Slicer_Date").SlicerItems(i).Value <> Format(Now(), "mm/dd/yyyy") Then 'if date doesn't match then
ActiveWorkbook.SlicerCaches("Slicer_Date").SlicerItems(i).Selected = False 'deselects all other dates
End If
Next i