2017-04-02 41 views
0

過濾器更新數據透視表到目前爲止,我還沒有使用VBA使用數據透視表。現在我想更新(刷新)2數據透視表並將日曆星期的過濾器設置爲最後一週。使用VBA

我的問題/這裏的問題是:

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 
+0

1.做一個測試2.可能是的,用DLookup()作爲一個選項3.'With'可以嵌套,但不會看到你爲什麼在這個代碼中。 – June7

回答

1
  1. 因爲你正在處理一個PageField(即一個領域是在過濾器窗格和已經「選擇多個項目」未選中),然後沒有,我不相信你需要清除過濾器。但我的建議是......把它放在那裏...它不會受到傷害。
  2. 更容易簡單地把某種錯誤在你的代碼處理,如果該項目不存在,拿起任何錯誤。如果您只是想忽略任何錯誤,請在代碼塊頂部放置一個On Error Resume Next語句。或者,您可能要通知用戶數據透視表未被過濾。如果你澄清你想要做什麼,我會發佈一個代碼片段。
  3. 需要注意的是,如果這兩個數據透視表共享同一個數據源,你不需要刷新兩個高速緩存,因爲它們共享一個緩存。如果是這樣的話,那麼就擺脫第二條刷新線。
  4. 你能解釋,爲什麼你是隱藏的列?它會在晚些時候被隱藏嗎?當您運行此代碼時,它可能會被隱藏嗎?
  5. 如果這是你所有的代碼是幹什麼的,那麼我可能不會打擾關閉screenupdating。但再一次,這並不重要。
+0

非常感謝傑弗裏 - 這真是太棒了! :)(這只是我的代碼的一小部分,但我之前完成的其他工作只是想檢查一下。) – Mike

+0

你回答了我幾乎所有的問題,並且第3項知識很棒(他們分享相同的知識資源)。唯一我不確定的是錯誤處理。在我的情況下,這將在前一個日曆周每週一過濾,所以我想在這裏介紹的唯一情況是顯示一個消息框,以防這個特定週數中沒有數據。我正在考慮像On Error GoTo ErrMsg這樣的東西,但我不知道如何涵蓋這個特定的錯誤。 – Mike