Извлечение данных из сводной таблицы в массив в VBA (Excel) - PullRequest
0 голосов
/ 28 мая 2019

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

Я пытался ссылаться на диапазон моего столбца с помощью «DataBodyRange», но я всегда получаю разные ошибки. «Лист4» - это лист, на котором находится моя сводная таблица1. И мне нужны все данные из столбца.

Public Sub ReadToArray()
    'Range
    Dim rg As Range
    Set rg = Worksheets("Sheet4").pt("PivotTable1").DataBodyRange

    'Dynamic Array
     Dim Done As Variant
     Done = rg.Value

    'Array Values
     Debug.Print "i", "Value"
     Dim i As Long
     For i = LBound(Done) To UBound(Done)
         Debug.Print i, Done(i)
     Next i
 End Sub

Конечным результатом является то, что я хочу распечатать значения для всего столбца и использовать их впоследствии.

1 Ответ

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

Итак, я вижу несколько проблем, которые вызывают это. Во-первых, для ссылки на сводную таблицу на листе вам нужно .pivottables(), а не .pt().

Затем, установив для массива значение из такого диапазона, вы получите двумерный массив, поэтому вам нужно перебрать его в двух измерениях, чтобы получить все значения. Я добавил вложенный цикл, используя второй итератор, j:

Public Sub ReadToArray()

     Dim pt As PivotTable
     Dim rg As Range
     Set pt = Worksheets("Sheet4").PivotTables("PivotTable1")

     Set rg = pt.DataBodyRange

     Dim Done As Variant

     Done = rg.Value

     Debug.Print "i", "Value"
     Dim i As Long, j As Long

     For i = LBound(Done, 1) To UBound(Done, 1)
        For j = LBound(Done, 2) To UBound(Done, 2)
            Debug.Print i & ", " & j & ", " & Done(i, j)
        Next j
     Next i

 End Sub
...