Как использовать getpivotdata, когда в поле данных сводной таблицы есть подзаголовок - PullRequest
1 голос
/ 02 апреля 2019

Я пытаюсь использовать getpivotdata для копирования определенных данных сводной таблицы в таблицу данных.Я могу сделать это, если нет подзаголовков.Однако, когда есть подзаголовки, я сталкиваюсь с проблемами при запуске кода.

Я пробовал много разных методов, но безрезультатно, пожалуйста, помогите.Я считаю, что я что-то упустил в скобке для getpivotdata.Пожалуйста, взгляните на код

Ошибка, которую я получаю из ответа Дамиана

Пример данных

ИзображениеСводная таблица

Работает, когда я не включаю подзаголовок.

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

Я ожидаю, что он отобразит данные в Staff Jim в ячейке C28, но сейчас я могу получить данные только всех сотрудниковв том же отделе 107.

Ответы [ 2 ]

0 голосов
/ 03 апреля 2019

После добавления кода для проверки ошибок, код наконец работает.

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```
0 голосов
/ 02 апреля 2019

Итак, как я уже говорил, все фильтры легко переносятся в следующие строки:

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.

Надеюсь, это поможет.

...