使用VBA对基于Excel中数据模型的数据透视表进行自动筛选

使用VBA对基于Excel中数据模型的数据透视表进行自动筛选,excel,vba,Excel,Vba,我需要在数据透视表上自动应用一组过滤器,然后存储结果。问题是,我所编写的代码对于普通的数据透视表工作得很好,但是当我的数据透视表基于Excel的数据模型时,它就不起作用了 我已经试着运行宏记录器来查看当我的数据透视表基于数据模型时会发生什么变化,但是我仍然无法使代码正常工作 ''这是适用于普通透视表的代码 Sub FilterTest1() Dim MonthRng As Range, YearRng As Range, OEMRng As Range, cell As Range

我需要在数据透视表上自动应用一组过滤器,然后存储结果。问题是,我所编写的代码对于普通的数据透视表工作得很好,但是当我的数据透视表基于Excel的数据模型时,它就不起作用了

我已经试着运行宏记录器来查看当我的数据透视表基于数据模型时会发生什么变化,但是我仍然无法使代码正常工作

''这是适用于普通透视表的代码

  Sub FilterTest1()


  Dim MonthRng As Range, YearRng As Range, OEMRng As Range, cell As Range

  Dim m As Range, y As Range, c As Range


  Set YearRng = Range("E1:I1")

  Set MonthRng = Range("E2:P2")

  Set OEMRng = Range("E3:AE3")


 For Each y In YearRng

  For Each m In MonthRng

    For Each c In OEMRng

         ActiveSheet.PivotTables("PivotTable1").PivotFields("SHIP_DATE (Year)").CurrentPage = y.Value
              ActiveSheet.PivotTables("PivotTable1").PivotFields("SHIP_DATE (Month)").CurrentPage = m.Value
                ActiveSheet.PivotTables("PivotTable1").PivotFields("CUSTOMER_NAME").CurrentPage = c.Value

             Next c

         Next m

     Next y

End Sub
''这就是我在运行宏记录器时得到的结果,当我的数据透视表基于数据模型时,可以看到不同的东西

   Sub test()


       ActiveSheet.PivotTables("PivotTable1").PivotFields( _
    "[ReadytoAnalyze  2].SHIP_DATE (Year)].[SHIP_DATE (Year)]"). _
         VisibleItemsList = Array("[ReadytoAnalyze  2].[SHIP_DATE  (Year)].&[2014]")

  End Sub

正如您所看到的,我希望逐个传递多个值的范围,而不是硬编码为2014的值。正如我所提到的,第一段代码适用于普通的透视表,但如果透视表基于数据模型,则不适用。我觉得我很快就能找到解决方案了,但我真的非常感谢任何帮助。

您能否通过以下方式更改设置正常透视宏中年份的第一行:

ActiveSheet.PivotTables("PivotTable1").PivotFields("[ReadytoAnalyze  2].SHIP_DATE (Year)].[SHIP_DATE (Year)]"). _
                 VisibleItemsList = Array("[ReadytoAnalyze  2].[SHIP_DATE  (Year)].&[" & y.Value & "]")

然后运行代码?然后查看哪一行显示错误。

是的,它现在可以工作了。非常感谢你。谢谢你的帮助!:)酷。。。。你可以用类似的方式更改其他行的月份等。。。。也。。。接受答案。:)