如何更好地更新数据透视表数据filter?

我使用下面的代码来更新数据透视表filter。
它只能过滤date等于今天date的项目。
它工作得很好,但有没有更快的方法来做到这一点?

Dim wsPivot1 as Worksheet Dim pt as PivotTable Dim pt_item as PivotItem Set wsPivot1 = Thisworkbook.Sheets("Pivot") For Each pt In wsPivot1.PivotTables pt.RefreshTable If DatePart("h", Now()) < 6 Then date_stamp = Format(Now() - 1, "m/d/yyyy") Else date_stamp = Format(Now(), "m/d/yyyy") End If If pt.Name = "PivotTable1" Then pt.PivotFields("Date_Adj").ClearAllFilters For Each pt_item In pt.PivotFields("Date_Adj").PivotItems Select Case pt_item.Name Case date_stamp pt_item.Visible = True Case Else pt_item.Visible = False End Select Next pt_item End If Next pt 

任何帮助将非常感激。 谢谢。

由于您似乎只想显示一个date并隐藏其余date,因此您可以为该date创build自定义filter。 replace你的for循环,即

 For Each pt_item In pt.PivotFields("Date_Adj").PivotItems Select Case pt_item.Name Case date_stamp pt_item.Visible = True Case Else pt_item.Visible = False End Select Next pt_item 

用这条线

 pt.PivotFields("Date_Adj").PivotFilters.Add _ Type:=xlSpecificDate, Value1:=date_stamp 

请注意,上述代码只有在“Date_Adj”列中的值存储为date时才有效。 如果不是,则需要使用这一行代码

 pt.PivotFields("Date_Adj").PivotFilters.Add _ Type:=xlCaptionEquals, Value1:=date_stamp 

示例了解我的示例数据可能严重过于简化,这是我用来testing我的解决scheme(注意:使用Excel 2007创build的示例)。

样本数据

“发货date”是inputdate; “Date_Adj”就是左边的相邻单元+ 1(例如=B2+1 )。

然后我创build了Pivot表并运行代码,如下图所示

数据透视表和宏

这是Jaycalbuild议的方法。
假设您在范围(“A2”)中使用filter的“数据透视表”工作表中有一个数据透视表。

此代码工作:

 Dim wsPivot1 as Worksheet Dim cel as Range Set wsPivot1 = Thisworkbook.Sheets("Pivot") Set cel = wsPivot1.Range("A2") cel.PivotField.PivotFilters.Add xlCaptionEquals, "Date_Adj", date_stamp 

它有一个限制,虽然。
它只能处理“行”和“列”标签中的filter。
不在报表filter上。

编辑1:如果您使用Report Filters请使用此function。

 Dim pt As PivotTable For Each pt in wsPivot1 pt.RefreshTable pt.PivotFields("Date_Adj").ClearAllFilters pt.PivotFields("Date_Adj").CurrentPage = date_stamp Next