如何更好地更新数据透视表数据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