我正在尝试使用 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”的标签列表。谁能指出我正确的方向?
我正在尝试使用 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”的标签列表。谁能指出我正确的方向?
我认为@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 的网站上找到对数据透视表范围进行编程的非常有用的参考。
在道格指出我正确的方向后,最终到达了那里。
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 年的紧凑格式。