VBA: невозможно работать с сводной таблицей (ошибка 1004) - PullRequest
0 голосов
/ 31 мая 2019

Хорошо, я действительно расстроен прямо сейчас.В течение часа или около того я пытался получить данные из простого Pivot.Я не могу заставить его работать.

Мой действительно простой код:

Sub getXXFromPivot()

     Dim test As PivotTable

     Set Sheet1 = ActiveWorkbook.Sheets("Sheet5")
     Set test = Sheet1.PivotTables("PivotTable1")
     Set test2 = test.ClearAllFilters

     MsgBox test2

End Sub

Я пытаюсь использовать метод "GetPivotData" для получения данных, но независимо от того, что я использую послеtest. (ClearAllFilters был просто тест). Я всегда получаю ошибку 1004. В чем здесь моя ошибка?Я не могу разобраться.«PivotTable1» определенно существует.Я могу MsgBox test и получить "PivotTable1" обратно.

Ответы [ 2 ]

2 голосов
/ 31 мая 2019

Добавляя к моему комментарию, смотрите ниже адаптацию вашего кода:

Option Explicit 'Is recommended to use this always
Sub getXXFromPivot()

    Dim sht As Worksheet
    Dim pTbl As PivotTable

    Set sht = ActiveWorkbook.Sheets("Sheet5")
    Set pTbl = sht.PivotTables("PivotTable1")
    pTbl.ClearAllFilters

    MsgBox pTbl.Name

End Sub

Довольно хороший источник информации о работе с сводными таблицами см. Руководство VBA по сводным таблицам Excel

1 голос
/ 31 мая 2019

Вы можете решить использовать TableRange1 или TableRange2 свойства сводной таблицы и проходить через них.В этом главное отличие:

  • TableRange1 - возвращает объект Range, представляющий диапазон, содержащий весь отчет сводной таблицы, но не содержащий полей страницы.Только для чтения.

  • TableRange2 - Возвращает объект Range, представляющий диапазон, содержащий весь отчет сводной таблицы, включая поля страницы.Только для чтения.


Sub GetXXFromPivot()

     Dim pt As PivotTable
     Dim wks As Worksheet

     Set wks = Worksheets(1)
     Set pt = wks.PivotTables("PivotTable1")

     Dim myResult As Range
     Set myResult = pt.TableRange2

     Dim myCell As Range
     For Each myCell In pt.TableRange2.Cells
        Debug.Print myCell
     Next myCell

End Sub
...