Извлечение данных из сводной таблицы vba

Вопрос:У меня сводная таблица для объединения "coverage" в "part" только для принятых частей. Затем я хочу извлечь "sum of coverage" на другой лист. Я написал следующий макрос: Sub Pull_data() 'Update the pivot table Sheets("Pivot").PivotTables("PivotTable2").PivotCache.Refresh 'clear all filters Sheets("Pivot").PivotTables("PivotTable2").PivotFields("Accepted").ClearAllFilters 'filters only accepted items Sheets("Pivot").PivotTables("PivotTable2").PivotFields("Accepted").CurrentPage = "YES" 'get the last row of the pivot table Set PT

Вопрос:

У меня сводная таблица для объединения «coverage» в «part» только для принятых частей.

Затем я хочу извлечь «sum of coverage» на другой лист.
Я написал следующий макрос:

Sub Pull_data() ‘Update the pivot table Sheets(«Pivot»).PivotTables(«PivotTable2»).PivotCache.Refresh ‘clear all filters Sheets(«Pivot»).PivotTables(«PivotTable2»).PivotFields(«Accepted»).ClearAllFilters ‘filters only accepted items Sheets(«Pivot»).PivotTables(«PivotTable2»).PivotFields(«Accepted»).CurrentPage = «YES» ‘get the last row of the pivot table Set PT = Sheets(«Pivot»).PivotTables(«PivotTable2») With PT.TableRange1 lngLastRow = .rows(.rows.Count).Row End With For i = 4 To lngLastRow ‘copy the coverage to destination sheet NEWi = i + 10 Sheets(«Destination»).Range(«G» & NEWi) = PivotTable.GetPivotData(data_field, Range(«I» & i), «Coverage») Next i End Sub

Я получаю ошибку времени выполнения ‘424’, объект, требуемый для

Sheets(«Destination»).Range(«G» & NEWi) = PivotTable.GetPivotData(data_field, Range(«I» & i), «Coverage»)

Каким будет правильный способ написать эту строку?

Лучший ответ:

Это должно быть:

Sheets(«Destination»).Range(«G» & i + 10).Value = _ pT.GetPivotData(«Sum of coverage», «Part», Range(«I» & i).Value).Value

Потому что pT.GetPivotData возвращает диапазон!

Очищенный код:

Sub Pull_data() Dim pT As PivotTable Set pT = Sheets(«Pivot»).PivotTables(«PivotTable2″) With pT »’Update the pivot table .PivotCache.Refresh »’clear all filters .PivotFields(«Accepted»).ClearAllFilters »’filters only accepted items .PivotFields(«Accepted»).CurrentPage = «YES» »’get the last row of the pivot table With .TableRange1 lngLastRow = .Rows(.Rows.Count).Row For i = .Cells(2, 1).Row To lngLastRow Debug.Print «i=» & i & «|» & Sheets(«Pivot»).Range(«I» & i).Value »’copy the coverage to destination sheet Sheets(«Destination»).Range(«G» & i + 10).Value = _ pT.GetPivotData(«Sum of coverage», «Part», Sheets(«Pivot»).Range(«I» & i).Value).Value Next i End With ‘.TableRange1 End With ‘pT End Sub Ответ №1

Вы можете попробовать скопировать весь столбец из PivotTable после его фильтрации в соответствии с вашими потребностями, TableRange2, использовать Resize для одного столбца, а затем Copy и PasteSpecial xlValues на целевой лист.

Если приведенный ниже код принимает неправильный столбец, вы также можете использовать Offset(0,1), чтобы получить правильный.

With PT .TableRange2.Resize(.TableRange2.Rows.Count, 1).Copy Worksheets(«Destination»).Range(«G14»).PasteSpecial xlValues ‘<— start Pasting from Row 14 End With

Примечание: если приведенный выше код занимает столбец слева, попробуйте следующую строку кода:

.TableRange2.Resize(.TableRange2.Rows.Count, 1).Offset(, 1).Copy

Оцените статью
Добавить комментарий