簡體   English   中英

使用VBA使用過濾器更新數據透視表

[英]Update pivot tables with filters using VBA

到目前為止,我還沒有將VBA與數據透視表一起使用。 現在,我想更新(刷新)2個數據透視表,並將日歷周的過濾器設置為最后一整周。

我的問題是:

1)我實際上是否需要.ClearAllFilters行,或者沒有它也可以設置過濾器嗎?
2)我可以在設置過濾器之前檢查表格中是否存在相應的項目(例如,第13周)嗎? 否則,我會嘗試過濾不存在​​的東西(還)。
3)我是否為此編寫了正確的代碼,或者有更短/更好的方法呢? 例如,我不知道,如果WithWith會在這里是有道理的。

我的代碼:

Dim varLastSunday As Date, varWeekNumber As Integer

varLastSunday = Date - Weekday(Date, vbUseSystemDayOfWeek)
varWeekNumber = CLng(Format(varLastSunday, "ww"))

Application.ScreenUpdating = False
With Worksheets(4)
    .Range("StartColumns").EntireColumn.Hidden = False
    .PivotTables("PivotTable9").PivotCache.Refresh
    .PivotTables("PivotTable9").PivotFields("WEEK_NUMBER").ClearAllFilters
    .PivotTables("PivotTable9").PivotFields("WEEK_NUMBER").CurrentPage = varWeekNumber
    .PivotTables("PivotTable10").PivotCache.Refresh
    .PivotTables("PivotTable10").PivotFields("week").ClearAllFilters
    .PivotTables("PivotTable10").PivotFields("week").CurrentPage = varWeekNumber
End With
Application.ScreenUpdating = True
  1. 因為您要處理的是PageField(即,處於“篩選器”窗格中且未選中“選擇多個項目”的字段),所以不能,我認為您不需要清除篩選器。 但是我的建議...只是留在那兒...不會有傷害。
  2. 只需在代碼中進行某種錯誤處理,以獲取不存在的任何錯誤,就可以輕松進行。 如果您只是想忽略任何錯誤,請在代碼塊頂部放置一個On Error Resume Next語句。 或者,您可能希望告知用戶數​​據透視表尚未過濾。 如果您想做什么,我將發布一個代碼段。
  3. 請注意,如果這兩個數據透視表共享同一數據源,則無需刷新兩個緩存,因為它們共享一個緩存。 如果真是這樣,那就擺脫第二刷新行。
  4. 您能否闡明為什么要隱藏該列? 以后會不隱藏嗎? 每當您運行此代碼時,它是否有可能被隱藏?
  5. 如果這是您的代碼所做的全部,那么我可能就不會打擾關閉screenupdating。 但同樣,這並不重要。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM