【发布时间】:2016-05-18 15:54:50
【问题描述】:
我有一个名为 week_of_year (1,2,3,4,5,6,7,8....) 的过滤字段,另一个数据透视字段 year(2012,2013,2014),下面的 vba 代码过滤2014/2015 的当前周和年,并隐藏其他所有内容。但问题是代码循环每条记录并且在涉及大数据透视表时运行缓慢。我正在尝试新代码,但遇到了一些错误。
Sub datefilter()
Dim PvtTbl As PivotTable
Set PvtTbl = Worksheets("LO").PivotTables("PivotTable3")
Dim dd As Integer
dd = Format(Date, "ww")
Dim pf As PivotField
Dim pf1 As PivotField
Dim PI As PivotItem
Set pf =
Worksheets("LO").PivotTables("PivotTable3").PivotFields("week_of_year")
Set pf1 =
Worksheets("LO").PivotTables("PivotTable3").PivotFields("year")
PvtTbl.ClearAllFilters
For Each PI In pf.PivotItems
If PI.Name = CStr(dd) Then
PI.Visible = True
Else
PI.Visible = False
End If
Next
For Each PI In pf1.PivotItems
If PI.Name = "2014" Or PI.Name = "2015" Then
PI.Visible = True
Else
PI.Visible = False
End If
Next
End Sub
我开发的新代码是:
Sub datefilter1()
Dim PvtTbl As PivotTable
Set PvtTbl = Worksheets("LO").PivotTables("PivotTable3")
Dim dd As Integer
dd = Format(Date, "ww")
Dim pf As PivotField
Set pf =
Worksheets("LO").PivotTables("PivotTable3").PivotFields("week_of_year")
pf.PivotFilters.Add2 xlValueEquals, 3
End Sub
代码失败
pf.PivotFilters.Add2 xlValueEquals, CStr(dd)
我也试过了:
pf.PivotFilters.Add2 Type:= xlValueEquals, Value1 := CStr(dd)
错误是无效的过程调用或参数。知道如何解决这个错误????
有更快的方法来过滤多个过滤条件吗?谢谢!
【问题讨论】:
-
数据透视表报表过滤器的工作方式与行/列标签过滤器略有不同。不幸的是,你被循环方法卡住了。
-
不可能......循环需要永远。我正在尝试 Currentpage 方法。有什么想法吗?
-
斯科特是正确的。 CurrentPage 方法仅显示一个 pivotItem,而不是多个,并且不能更改为显示多个,除非使用循环方法。如果您想做一些不同的事情,也许您可以在数据上使用帮助列(weekRange1 对应于第 1-8 周)并使用 currentpage 选项过滤到该列。
-
pivotfilter.add 方法呢?我做错了什么?也许该方法也比循环更快? @OpiesDad
-
根据这篇文章:stackoverflow.com/questions/764504/… 似乎无法在循环时阻止数据透视表的更新。我尝试了所有答案,但都没有奏效,并且 OP 从未将任何答案标记为答案,这表明它们也不适用于他。
标签: excel vba pivot-table