尝试使用Excel中的VBA从数据透视表中提取DataField

时间:2013-09-02 14:29:03

标签: excel-vba vba excel

我试图使用Excel从枢轴表中提取列值和数据值。

For j = 1 To 1 'pt.RowFields(i).PivotItems.Count
    sum = pt.DataFields(2).PivotItems(j)
    Client = pt.RowFields(1).PivotItems(j)
    Sheets("InvoiceTemplate").Range("c7").Value = Client
    Sheets("InvoiceTemplate").Range("i13").Value = sum
Next

客户端值完全按预期返回。但是,sum值会引发错误:

Unable To Get PivotItems Property from PivotField class.

使用如下所示的数据透视表,我预计会有Contoso的结果和£60.50

                  net           gross

Contoso           £50.00        £60.50
Adventureworks    £100          £110.00

知道我做错了什么吗?顺便说一下,我知道我有一个1到1的循环,但一旦这个工作就会被修改。

1 个答案:

答案 0 :(得分:0)

我认为这可以满足您的需求:

Sub PrintPivotFields()
Dim pvt As Excel.PivotTable
Dim pvtAcctField As Excel.PivotField
Dim pvtNetField As Excel.PivotField
Dim pvtItem As Excel.PivotItem

Set pvt = ActiveCell.PivotTable
Set pvtAcctField = pvt.RowFields(1)
Set pvtNetField = pvt.DataFields(1)
For Each pvtItem In pvtAcctField.PivotItems
    Debug.Print pvtItem.Name
    Debug.Print Intersect(pvtItem.DataRange.EntireRow, pvtNetField.DataRange).Value
Next pvtItem
End Sub

我没有提到Jon Peltier的great VBA pivot table reference,但如果你这样做,你可能会找到更好的方法。