10

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

问题:我想找出报告过滤器中的字段名称。所以我正在寻找RegionCountryName和。报告过滤器是动态的并且可以更改。CitynameProductKey

截图

在此处输入图像描述

我尝试了什么:我检查了 Power Pivot 的每个属性,但没有找到可以让我遍历 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

错误截图

在此处输入图像描述

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

编辑

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

4

3 回答 3

3

经过一些测试,您似乎可以通过列出 PivotFields 并检查其 Orientation 属性的值是否等于 XlPageField 来获取页面过滤器字段的列表。试试下面的代码:

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

希望这可以帮助

于 2013-09-22T21:14:27.447 回答
1

自提出原始问题以来已经过去了两年多,但我仍然找不到令人满意的答案...

但是我找到了解决方法 :-) 您也可以通过切片器更改 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

我不是专业人士,但我希望它有所帮助。

于 2015-11-24T14:46:16.177 回答
1

如果您在 realce_net 的帖子中将 pt.pivotfields 更改为 pt.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
于 2017-04-19T02:15:00.117 回答