2015-05-15 51 views
0

我正在編寫一個代碼,以在按下按鈕時同時自動更改多個數據透視表上的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代碼來正確設置過濾器,在這一點上,我很難理解爲什麼它只有在選擇全部時才起作用。任何幫助,將不勝感激!

回答

0

找到了問題......當選擇All時,它不喜歡最後一組括號前的&符號。我添加了這一點代碼:

'Define strings 
If rWeek = "All" Then 
    sWeek = "[Time Date].[Workforce Week].[All]" 
Else 
    sWeek = "[Time Date].[Workforce Week].&[" & rWeek & "]" 
End If 

現在代碼工作正常。

相關問題