我正在编写一个代码,可以在按下按钮的同时自动更改多个数据透视表上的3个过滤器。有两个工作表,一个名为MASTER,用于保存按钮,另外三个用于指定年,月和周的下拉框,另一个名为PIVOTS,显然,它包含所有数据透视表(没有其他内容)。
我在这里编写的代码除了为“周”标准选择“全部”时工作除外。我们的SQL多维数据集按以下格式格式化:YYYY-MM-DDT00:00:00。我有一个帮助公式,检查为周选择的是“全部”还是日期;如果选择“全部”,则不添加任何内容,但如果选择了日期,则会在日期结束时添加“T00:00:00”以创建正确的格式。选择日期时,宏可以工作,但是当选择All时,我得到“运行时错误'424':对象必需。”
以下是代码:
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代码中使用的正确单词来正确设置过滤器,此时我很难过为什么它只在选择All时才起作用。任何帮助将不胜感激!
答案 0 :(得分:0)
发现问题......它不喜欢&选择全部时最后一组括号前的符号。我添加了这段代码:
'Define strings
If rWeek = "All" Then
sWeek = "[Time Date].[Workforce Week].[All]"
Else
sWeek = "[Time Date].[Workforce Week].&[" & rWeek & "]"
End If
现在代码工作正常。