我正在編寫一個代碼,以在按下按鈕時同時自動更改多個數據透視表上的3個過濾器。有兩個工作表,一個名爲MASTER,保存按鈕和3個用於指定Year,Month和Week的下拉框,另一個名爲PIVOTS,顯然,它保存所有的數據透視表(並且沒有其他)。嘗試使用VBA更改多個數據透視表過濾器時發生錯誤(Excel)
我在這裏寫的代碼的作品除了當我有「所有」選擇爲周標準。我們的SQL多維數據集按以下格式格式化星期:YYYY-MM-DDT00:00:00。我有一個幫手公式,用於檢查Week的選擇是「全部」還是日期;如果選擇「全部」,則不會添加任何內容,但如果選擇了某個日期,則會在日期末尾添加「T00:00:00」以創建正確的格式。當選擇一個日期時,該宏可以工作,但是當選擇All時,會出現「運行時錯誤'424':Object Required」。
下面是代碼:
Sub ChangeCubesMonth()
Dim PT As PivotTable
Dim rWeek As Range
Dim rMonth As Range
Dim rYear As Range
Dim sWeek As String
Dim sMonth As String
Dim sYear As String
'Define ranges
Set rWeek = ThisWorkbook.Sheets("MASTER").Range("Y18")
Set rMonth = ThisWorkbook.Sheets("MASTER").Range("Y2")
Set rYear = ThisWorkbook.Sheets("MASTER").Range("E1")
'Define strings
sWeek = "[Time Date].[Workforce Week].&[" & rWeek & "]"
sMonth = "[Time Date].[Month].&[" & rMonth & "]"
sYear = "[Time Date].[Year].&[" & rYear & "]"
On Error GoTo errHandler
For Each PT In Sheets("PIVOTS").PivotTables
With PT.PivotFields("[Time Date].[Workforce Week].[Workforce Week]")
.ClearAllFilters
.CurrentPageName = sWeek
End With
With PT.PivotFields("[Time Date].[Month].[Month]")
.CurrentPageName = sMonth
End With
With PT.PivotFields("[Time Date].[Year].[Year]")
.CurrentPageName = sYear
End With
Next PT
Exit Sub
errHandler:
MsgBox "Error " & Err.Number & ": " & Err.Description & " in " & _
VBE.ActiveCodePane.CodeModule, vbOKOnly, "Error"
End Sub
當我有一個日期選擇,這一切完美的作品。然而,當我選擇「All」並使用Step Into(F8)時,在進入錯誤處理程序之前,我一直到「.CurrentPageName = sWeek」之後的「End With」。
我已經確定「全部」是正確的詞,用於VBA代碼來正確設置過濾器,在這一點上,我很難理解爲什麼它只有在選擇全部時才起作用。任何幫助,將不勝感激!