以编程方式在Slicer

时间:2015-10-14 23:19:09

标签: excel vba excel-vba

我需要通过VBA为今天的日期选择切片器项目。我尝试了两种方法:

  1. 使用SlicerItems方法,但SlicerItems会导致

      

    运行时错误'1004':应用程序定义或对象定义错误

    错误消息,即使我使用最简单的版本:

    ActiveWorkbook.SlicerCaches(1).SlicerItems(1).Selected = True
    

    我已尽力尝试了各种变体,包括按名称指定缓存,但我总是得到同样的错误。

  2. 我录制了一个宏,它生成一条运行的行,并选择特定的切片器项:

    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]") 
    
  3. 我已验证变量的格式输出正确的格式以匹配2015-10-14T00:00:00,但它不接受它。我还尝试仅修改日期部分并手动输入T00:00:00部分,但这也不起作用。

    所以我正式感到难过并欢迎任何帮助。

1 个答案:

答案 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