【问题标题】:Programmatically select today's date on Slicer在 Slicer 上以编程方式选择今天的日期
【发布时间】:2018-04-02 14:07:47
【问题描述】:

我需要通过 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]") 
    

我已经验证了变量输出的格式正确,以匹配2015-10-14T00:00:00,但它不接受它。我也尝试只修改日期部分并手动输入T00:00:00 部分,但这也不起作用。

所以我被官方难住了,欢迎任何帮助。

【问题讨论】:

  • 您的切片器与普通数据透视表关联还是与 Power Pivot 关联?
  • 也许您可以发布不起作用的代码?
  • 这是 Power Pivot。数据源是一个 SQL 数据立方体。我怀疑这是问题的一部分。

标签: vba excel


【解决方案1】:

选择单个切片器项目与您的预期相反。您需要取消选择所有其他日期,而不是选择今天。

试试这个代码。 将“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

【讨论】:

  • 感谢您的回复。这与我之前尝试使用的代码匹配,但我遇到了与上述方法一相同的问题。每当我尝试使用“SlicerItems”时,它都会出错。我在您的解决方案的第一行收到运行时错误“1004”。这可能是因为我使用的是 Power Pivot 吗?
  • 这是可能的。我使用常规数据透视表测试了我的解决方案。
猜你喜欢
  • 2023-04-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-09-22
  • 1970-01-01
  • 2014-09-24
  • 2017-07-07
相关资源
最近更新 更多