2016-02-08 136 views
0

我有一個名爲week_of_year(1,2,3,4,5,6,7,8 ....)的過濾器字段,另一個數據透視字段年(2012,2013,2014),vba代碼在2014/2015的當前星期和年份,下方會進行過濾並隱藏其他所有內容。但問題是代碼會循環每條記錄,並且在涉及大型數據透視表時運行緩慢。我嘗試一個新的代碼,但遇到一些錯誤。VBA過濾器錯誤

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) 

的錯誤是無效的過程調用或argument.Any idea我怎樣才能解決這個錯誤? ????

任何更快的方式來過濾多個過濾條件?謝謝!

+1

數據透視表報表過濾器的工作方式與行/列標籤過濾器有點不同。不幸的是,你堅持使用循環方法。 –

+0

沒辦法.....循環永遠。我試用Currentpage方法。有什麼想法呢? – Sailormoon

+0

斯科特是正確的。CurrentPage方法只顯示一個pivotItem,不是多個,除了使用循環方法外,不能更改爲顯示多個。如果你想做一些不同的事情,也許你可以在你的數據上使用一個輔助列(weekRange1對應1-8周),並使用當前頁面選項對其進行過濾。 – OpiesDad

回答

1

如果你只想要過濾的一個值,拖動感興趣的報告過濾器窗格中的字段,那麼你可以非常迅速地做到這一點,而不使用下面的代碼循環:

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」字段將 複製到Report Filter中a
  2. 在一個數據透視表的week_of_year字段上設置切片器,並通過Report Connections 對話框將它連接到另一個數據透視表。 (右鍵單擊切片器,選擇「報告連接」)
  3. 修改上面的代碼,使其在第二個數據透視表上運行。

切片機然後將同步兩個數據透視表。

如果你想過濾的多個值,該字段拖到行區域,並使用此:

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字段,將感興趣的字段作爲切片器連接在一起,隱藏將切片器放在某處,然後修改代碼,使其在帶有行場的數據透視表副本上運行。

如果您想了解有關高效過濾數據透視表的更多信息,我建議您閱讀我的文章http://dailydoseofexcel.com/archives/2013/11/14/filtering-pivots-based-on-external-ranges/

+0

嗨,傑夫我實際上把currentpage從我的代碼cuz它只允許一個值,如果我想多個項目,他們說它不會工作。如果我想要本週和前一週,你會知道該怎麼做嗎?謝謝!! – Sailormoon

+0

看到我上面修改的答案。 – jeffreyweir

+0

傑弗裏感謝,只捕獲兩個項目,如果我想要多個項目,只有日期,但也與字符串?如果有任何解決方案呢?我有三個過濾器,都需要編碼,包括日期,價值和多個項目。有了這個條件,我唯一的選擇是循環每個記錄?再次感謝!!!!!! – Sailormoon