免责声明:这个问题发布在msdn forum,但由于我没有得到任何回复(令人惊讶),我也在这里交叉发布。在尝试尝试此问题之前,您可能需要检查该链接。如果在该链接中发布解决方案,我不希望您浪费您的时间:)
问题:我想在报告过滤器中找到字段名称。所以我正在寻找RegionCountryName
,Cityname
和ProductKey
。报告过滤器是动态的,可以更改。
截图:
我尝试了什么:我已经检查了Power Pivot的每个属性,但是我找不到哪些属性可以让我遍历电源枢轴的字段。
我甚至试过这段代码,但显然在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
错误ScreenShot
那我错过了什么?或者我应该采取不同的方法吗?
修改
如果有人想要试用它,可以从HERE下载该文件我正在查看Inventory
表。
答案 0 :(得分:3)
经过一些测试后,您似乎可以通过列出PivotFields并检查其Orientation属性的值是否等于XlPageField来获取Page 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
希望这有帮助
答案 1 :(得分:1)
如果您将pt.pivotfields更改为realce_net帖子中的pt.pagefields,则应该运行。正如微软的参考文献所述,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 :(得分:0)
自提出原始问题以来已经过去了两年多,但我仍然找不到令人满意的答案......
但我找到了解决方法:-) 您也可以通过切片机更改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
我不是专业人士,但我希望它有所帮助。