Excel VBA操作数据模型透视表筛选时出现错误求助
解决数据模型透视表VBA筛选报错问题
问题描述
我通过数据模型创建查询并设置了度量值,之后在Excel工作表中生成了带筛选字段的透视表。现在想通过VBA关联这些透视表,基于单元格里的下拉列表清除或设置所有透视表的Location字段筛选,但运行代码时弹出运行时错误'1004':无法获取PivotFields类的CurrentPage属性。
原错误代码
Private Sub CommandButton1_Click() Dim Password As String Dim A As String Dim PT As PivotTable Dim PF As PivotField Password = InputBox("Kindly Enter Password", "Hello") If Password = Sheet1.Range("N2").Value Then Sheet4.Visible = xlSheetVisible Sheet4.Select Sheet5.Visible = xlSheetVisible Sheet5.Select ThisWorkbook.Worksheets("PVT QTY").Activate A = Worksheets("PVT QTY").Cells(1, 2).Value For Each PT In ActiveSheet.PivotTables With PT.PivotFields("Location") PF.ClearAllFilters .CurrentPage = A End With Next Else MsgBox "Password Is Incorrect! Kindly Try Again Or Back To M Adel ", vbCritical, "Wrong password" End If End Sub
错误原因
- 变量
PF未赋值就调用ClearAllFilters,属于无效对象引用 - 基于数据模型的OLAP透视表,不能用普通透视表的
CurrentPage方法设置筛选,必须使用适用于OLAP的CurrentPageName属性,字段引用格式也不同
修正后的代码
Private Sub CommandButton1_Click() Dim Password As String Dim targetLocation As String Dim pt As PivotTable Dim pf As PivotField ' 密码验证 Password = InputBox("请输入密码", "权限验证") If Password <> Sheet1.Range("N2").Value Then MsgBox "密码错误!请重试或联系M Adel", vbCritical, "验证失败" Exit Sub End If ' 显示隐藏工作表 Sheet4.Visible = xlSheetVisible Sheet5.Visible = xlSheetVisible ' 获取目标筛选值 targetLocation = ThisWorkbook.Worksheets("PVT QTY").Cells(1, 2).Value ' 遍历指定工作表的所有透视表 For Each pt In ThisWorkbook.Worksheets("PVT QTY").PivotTables ' 替换为数据模型中Location字段的完整OLAP路径 Set pf = pt.PivotFields("[你的维度名称].[Location].[Location]") ' 清除字段筛选 pf.ClearAllFilters ' 设置OLAP透视表的筛选值 pf.CurrentPageName = "[你的维度名称].[Location].&[" & targetLocation & "]" Next pt End Sub
注意事项
- 必须替换代码中的
[你的维度名称]为数据模型里Location字段所属的实际维度名,可以在透视表字段列表中查看完整的字段路径 - 避免使用
Select/Activate方法,直接引用工作表和对象能让代码更稳定,减少运行错误 - OLAP透视表的字段引用必须严格遵循
[维度名].[层级名].[成员名]的格式
内容的提问来源于stack exchange,提问作者Mohamed Adel
相关产品推荐
相关产品推荐

