0

我正在尝试使用 VBA 从数据透视表中提取和操作数据。我的数据透视表有三个行标签(D_Campaign、D_TL、D_Agent_Name)。

使用

For Each pt1 In pt.RowFields("D_Agent_Name").PivotItems
    Debug.Print pt1.Name
Next pt1

我可以获得“D_Agent_Name”中所有标签的列表。但是,我想要的是“D_Agent_Name”中给定值“D_TL”的标签列表。谁能指出我正确的方向?

4

2 回答 2

0

我认为@gimp 可能是正确的,因为它更容易处理源数据,但这里有一些对我有用的东西:

Sub PrintTLValues(AgentName As String)
Dim pt As Excel.PivotTable
Dim rfTL As Excel.PivotField
Dim rfAN As Excel.PivotField
Dim cell As Excel.Range

Set pt = ThisWorkbook.Worksheets(1).PivotTables(1)
Set rfAN = pt.RowFields("D_Agent_Name")
Set rfTL = pt.RowFields("D_TL")
For Each cell In Intersect(pt.DataBodyRange.EntireRow, rfAN.DataRange)
    If cell.Value = AgentName Then
        Debug.Print Intersect(cell.EntireRow, rfTL.DataRange).Value
    End If
Next cell
End Sub

像这样称呼它:

GetTLValues "Michael"

我喜欢对数据透视表进行编程,我的经验是通常有不止一种方法可以给数据透视表猫换皮 :)。可以在 Jon Peltier 的网站上找到对数据透视表范围进行编程的非常有用的参考。

于 2012-08-16T17:52:37.577 回答
0

在道格指出我正确的方向后,最终到达了那里。

Sub ptSelect()
    ' Select intersect of pivot table and output cell values to debug window
    Dim pt As PivotTable
    Dim ptSel As Range

    Set pt = Worksheets("Pivot Table").PivotTables("PT Sales Data")
    Set ptSel = Intersect(pt.PivotFields("D_Campaign").PivotItems("Acquisition").DataRange.EntireRow, pt.PivotFields("D_TL").DataRange)

    For Each Cell In ptSel
        Debug.Print Cell.Value
    Next Cell
End Sub

我注意到的一件事是,这要求数据透视表采用经典格式,它不适用于 2007 年的紧凑格式。

于 2012-08-17T08:55:18.287 回答