我正在使用以下代码更新数据透视表过滤器 它仅过滤日期字段下等于今天日期的项目 工作正常,但有更快的方法吗?
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
非常感谢任何帮助。感谢。
答案 0 :(得分:2)
由于您似乎只想显示一个日期并隐藏其余日期,因此您可以为该日期创建自定义过滤器。替换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”列中的值存储为日期时,上述代码才有效。如果不是,则需要使用这行代码
pt.PivotFields("Date_Adj").PivotFilters.Add _
Type:=xlCaptionEquals, Value1:=date_stamp
示例强> 了解我的示例数据可能过于简单,这是我用来测试我的解决方案(注意:使用Excel 2007创建的示例)。
“发货日期”是输入日期; “Date_Adj”只是左相邻单元格+ 1(例如=B2+1
)。
然后我创建了Pivot表并运行了代码,如下图所示
答案 1 :(得分:1)
这是Jaycal建议的方法 假设您在“Pivot”工作表中有一个数据透视表,其中过滤器在范围(“A2”)中。
此代码有效:
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
但它有一个限制 它仅适用于行和列标签中的过滤器 不在报告过滤器上。
编辑1:如果您正在使用Report Filters
。
Dim pt As PivotTable
For Each pt in wsPivot1
pt.RefreshTable
pt.PivotFields("Date_Adj").ClearAllFilters
pt.PivotFields("Date_Adj").CurrentPage = date_stamp
Next