VBA筛选错误

我有一个名为week_of_year(1,2,3,4,5,6,7,8 ….)的filter字段,另一个数据透视字段年(2012,2013,2014),vba代码在本周filter和2014/2015年,并隐藏一切。 但问题是代码循环每个logging,并运行缓慢时,大的数据透视表。 我尝试一个新的代码,但遇到一些错误。

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) 

错误是无效的过程调用或参数。任何想法我怎样才能解决这个错误?????

任何更快的方式来过滤多个过滤条件? 谢谢!

如果您只想过滤一个值,请将感兴趣的字段拖到“报告filter”窗格中,然后快速执行此操作,而无需使用以下代码进行循环:

 Sub FilterOnWeek() Dim pt As PivotTable Dim pf As PivotField Set pt = Worksheets("LO").PivotTables("PivotTable3") Set pf = pt.PivotFields("week_of_year") pf.CurrentPage = Format(Date, "ww") End Sub 

如果由于某种原因,该字段绝对必须作为行字段保留在数据透视表中,如果您使用的是Excel 2010或更高版本,仍然可以通过以下方法进行循环筛选

  1. 制作数据透视表的副本,并将副本中的“week_of_year”字段拖到“报表filter”区域
  2. 在一个数据透视表的week_of_year字段上设置切片器,并通过“报告连接”对话框将其连接到另一个数据透视表。 (右键单击切片机,select“报告连接”)
  3. 修改上面的代码,使其在第二个数据透视表上运行。

切片机然后将同步两个数据透视表。

如果要过滤多个值,请将该字段拖到ROWS区域,然后使用以下命令:

 Sub FilterOnWeek2() Dim pt As PivotTable Dim pf As PivotField Dim pi As PivotItem Dim lStart As Long Dim lEnd As Long lEnd = Format(Date, "ww") lStart = Val(Format(Date, "ww")) - 1 Set pt = Worksheets("LO").PivotTables("PivotTable3") Set pf = pt.PivotFields("week_of_year") With pf .ClearAllFilters .PivotFilters.Add Type:=xlCaptionIsBetween, Value1:=lStart, Value2:=lEnd End With End Sub 

如果由于某种原因,您希望数据透视表中的此字段作为行字段,请按照与上述相同的一般方法:制作数据透视表的副本,将要过滤的字段放在副本中作为ROWS字段,将感兴趣的领域作为一个切片机连接在一起,将切片机隐藏在某个地方,然后修改代码,使其运行在包含行场的数据透视表的副本上。

如果您想了解更多有关过滤数据透视表的信息,build议您阅读我的文章http://dailydoseofexcel.com/archives/2013/11/14/filtering-pivots-based-on-external-ranges/