当数据透视表数据字段具有子标题时,如何使用getpivotdata

时间:2019-04-02 05:59:29

标签: vba pivot-table

我正在尝试使用getpivotdata将某些特定的数据透视表数据复制到数据表中。如果没有子标题,我可以做到。但是,当有子标题时,我会在运行代码时遇到问题。

我尝试了许多不同的方法,但无济于事,请帮助。我相信我错过了getpivotdata括号中的内容。请看一下代码

Error i get from Damian's Answer

Sample Data

Picture of Pivot Table

当我不包含副标题时,它就起作用。

Dim PT As PivotTable

    Set PT = Sheet2.PivotTables("PivotTable2")

    Range("C28").Value = PT.GetPivotData("Profit", "Region", "2", "Department", "107").Value

当我包含如下所示的副标题时,它不起作用。它会给我错误1004(应用程序定义或对象定义的错误)

Dim PT As PivotTable

    Set PT = Sheet2.PivotTables("PivotTable2")

    Range("C28").Value = PT.GetPivotData("Profit", "Region", "2", "Department", "107", "Staff", "Jim").Value

我希望它可以显示单元格C28中Jim Staff下的数据,但现在我只能获取107的同一部门下所有职员的数据。

2 个答案:

答案 0 :(得分:0)

就像我告诉你的那样,就像将所有过滤器带到这样的行一样简单:

Pivot

通过以下方式使用此代码:

Option Explicit
Sub Test()

    Dim PT As PivotTable

    With ThisWorkbook.Sheets("Test")
        Set PT = .PivotTables("Test")

        .Cells(1, 1) = PT.GetPivotData("Profit", "Region", "2", "Department", "107", "Staff", "Jim").Value
    End With

End Sub

如您所见,给我吉姆在单元格A1上的利润值。请注意,执行此操作时,过滤器具有优先级。在这种情况下,您始终必须先过滤区域,然后再过滤部门,最后过滤人员。

顺序无关紧要,但是要获取人员数据,必须同时提供地区和部门。

要获取部门数据时,只需提供地区和部门。最后,如果您只需要按地区划分数据,则只需提供de Region。

希望有帮助。

答案 1 :(得分:0)

添加一些错误测试代码后,该代码终于可以工作了。

Sub Test()

    Dim PT As PivotTable
    Dim wkSheet As Worksheet
    Set wkSheet = Worksheets("Sheet2")

    wkSheet.Activate
    With ThisWorkbook.Sheets("Sheet2")
        Set PT = .PivotTables("PivotTable2")
        Sheets("Sheet2").Range("C30").Select

    On Error Resume Next
.Cells(30, 5) = PT.GetPivotData("Profit", "Region", "5", "Department", "109", "Staff", "John").Value
'Your Line here which causes 1004 error
If Err.Number > 0 Then
  Debug.Print Err.Number & ":" & Err.Description
End If

    End With

End Sub```