将excel切片机设置为今天的date

我有一个date切片机连接到一个pivottable和两个pivotcharts。 我想这个切片机自动过滤到今天的date。 我重新调整我必须使用VBA代码,所以我google了,并从这个答案中find了以下代码: https : //social.msdn.microsoft.com/Forums/office/en-US/2542f1dc-ca62-4ea4- b686-bfa78b53c699 /自动选,最后获得最新限幅器值,当打开工作簿?论坛= exceldev

Private Sub Workbook_Open() Dim today As Date today = Now Dim todayString As String todayString = Format$(today, "d mmm yyyy") Dim item As SlicerItem For Each item In ThisWorkbook.SlicerCaches("Date Slicer").SlicerItems If item.Name = todayString Then item.Selected = True Else item.Selected = False End If Next item ThisWorkbook.RefreshAll End Sub 

但是,当我应用这个代码,我得到了以下错误:

 Run-time error '2004': Application-defined or object-defined error 

有没有人得到工作代码来操纵date切片机,或知道为什么这不起作用?

Date Slicer名称可能不正确。 如果我logging一个macros并select一个date,然后查看我的代码,我得到这个:

 With ActiveWorkbook.SlicerCaches("Slicer_Date") .SlicerItems("1/1/2015").Selected = False .SlicerItems("10/5/2015").Selected = False .SlicerItems("10/26/2015 13:46").Selected = False End With 

所以切片机的对象名称在我的macros代码Slicer_Date 。 尝试录制macros以查找切片器的对象名称。 然后在上面的代码中使用该名称。

编辑评论

我已经改变了一些代码,以适应我的date格式:

 Sub SlicerSelectToday() Dim today As Date today = Now Dim todayString As String todayString = Format$(today, "m/d/yyyy") ' I have US date Dim item As SlicerItem For Each item In ThisWorkbook.SlicerCaches("Slicer_Date").SlicerItems If item.Name = todayString Then item.Selected = True Else item.Selected = False End If Next item ThisWorkbook.RefreshAll End Sub 

这个sub工作,并在切片机中select今天的date。

@ lars-rotgers对于没有透视表的情况,回答是100_%正确,但对于有透视表的情况,这是正确的解决scheme:

 Sub SetTodaysDate() Dim today As Date today = Now Dim todayString As String todayString = Format$(today, "dd.mm.yyyy") ThisWorkbook.SlicerCaches("Slicer_Date").ClearManualFilter ActiveWorkbook.SlicerCaches("Slicer_Date").VisibleSlicerItemsList = Array( _ "[Period].[Date].&[" & todayString & "]") End Sub 

[期间]。[date]必须与立方体中的尺寸等对应。