Power Pivot Table – 在报告filter中循环显示字段

免责声明 :这个问题是张贴在MSDN论坛,但由于我没有得到任何答复(令人惊讶),我也在这里交叉发布。 尝试尝试此问题之前,您可能需要检查该链接。 我不希望你浪费你的时间,如果解决scheme是张贴在该链接:)

问题 :我想查找报表filter中的字段名称。 所以我正在寻找RegionCountryNameCitynameProductKey 。 报表filter是dynamic的,可以更改。

截图

在这里输入图像说明

我试过了什么 :我已经检查了Power Pivot的每一个属性,但是我没有find能够让我循环通过权重支点的属性。

我甚至尝试过这个代码,但它显然给我一个错误Set pf = pt.PageFields(1)

 Sub Sample() Dim pt As PivotTable, pi As PivotItem, pf As PivotField Dim lLoop As Long Set pt = Sheet1.PivotTables(1) Set pf = pt.PageFields(1) For Each pi In pf.PivotItems Debug.Print pi.Name Next pi End Sub 

错误Scre​​enShot

在这里输入图像说明

那么我错过了什么? 或者我应该采取不同的方法?

编辑

如果有人想试用它,可以从这里下载文件我正在查看Inventory表。

经过一些testing,似乎可以通过列出数据透视字段并检查其方向属性的值是否等于XlPageField来获取页面filter字段的列表。 试试下面的代码:

 Sub Test() Dim pt as PivotTable Dim pf as PivotFields set pt=Sheets("test").PivotTables(1) For each pf in pt.PivotFields If pf.Orientation=xlPageField Then Debug.Print pf.Name End If Next pf End Sub 

希望这可以帮助

如果您将pt.pivotfields更改为realce_net文章中的pt.pagefields,则应该运行。 正如Microsoft参考文献所述,pagefields是随Office 2013一起引入的。

  Dim pt As PivotTable Dim pf As PivotFields Set pt = Sheets("test").PivotTables(1) For Each pf In pt.PageFields If pf.Orientation = xlPageField Then Debug.Print pf.Name End If Next pf 

提出原来的问题已经有2年多了,但仍然找不到满意的答案。

但我发现了一个办法:-)你也可以通过切片器更改PowerPivot表。

我用这个代码来改变我的文件中选定的月份:

 Private Sub SpinButton21_SpinDown() Dim SC As SlicerCache Dim SL As SlicerCacheLevel Dim SI As SlicerItem Set SC = ActiveWorkbook.SlicerCaches("Slicer_Month4") Set SL = SC.SlicerCacheLevels(1) 'get the current item number c = 1 For Each SI In SL.SlicerItems If SI.Selected = True Then MONTHindex = c Exit For End If c = c + 1 Next SI If MONTHindex = 1 Then MONTHindex = SC.SlicerCacheLevels.Item.Count + 1 End If SC.VisibleSlicerItemsList = SL.SlicerItems(MONTHindex - 1).Name End Sub 

我不是一个职业,但我希望它可以帮助。