Я создал сводную таблицу в VBA и хотел бы скопировать только определенные столбцы в новую таблицу. Первый раздел кода работает нормально, когда я копирую все столбцы строки, но мой синтаксис неверен, когда я пытаюсь скопировать только указанные столбцы данных c. Я добавил изображение для более простого объяснения.
Моя сводная таблица выглядит следующим образом:
Строки : содержит 8 столбцов
Значения : 1 столбец («Количество сайтов»)
Столбцы : 1 («МС»). Который имеет 7 значений, но может быть больше в будущем. Меня интересует только тот, который показывает "4". и затем общий итог.
Я только хочу скопировать DatabodyRange столбца "4" и DatabodyRange "Count of Site" (который является общим итогом столбца)
Итак, 2-й и 3-я часть не работает (отмечено в коде).
2-я часть копирует только 7 заголовков в разделе "MS" и вставляет их во весь набор таблиц, который я установил. Следует копировать данные только из одного заголовка («4»).
3-я часть копирует все данные в столбцах значений. Таким образом, все данные под заголовками, упомянутыми выше, волнуют, а не только диапазон данных "Общая сумма".
Dim rng As Range
Dim CopyRange As Range
Set rng = wsPivot.PivotTables("PvtSDCdata").RowRange
Set CopyRange = rng.Offset(2, 0).Resize(rng.Rows.Count - 2, rng.Columns.Count)
'THIS PART WORKS
With CopyRange
wb.Worksheets("Number of Stores Ranged").ListObjects("Table_Number_of_Stores_Ranged").DataBodyRange.Cells(1, 1).Resize(CopyRange.Rows.Count, CopyRange.Columns.Count).Value = .Value
End With
'2ND PART THAT DOESN'T WORK
Set rng = wsPivot.PivotTables("PvtSDCdata").PivotFields("MS").DataRange
With rng
wb.Worksheets("Number of Stores Ranged").ListObjects("Table_Number_of_Stores_Ranged").ListColumns("Number of Stores Ranged").DataBodyRange.Cells(1, 1).Resize(CopyRange.Rows.Count, CopyRange.Columns.Count).Value = .Value
End With
'3RD PART THAT DOESN'T WORK
Set rng = wsPivot.PivotTables("PvtSDCdata").PivotFields("Count of Site").DataRange
With rng
wb.Worksheets("Number of Stores Ranged").ListObjects("Table_Number_of_Stores_Ranged").ListColumns("Total Number of Stores : In Province").DataBodyRange.Cells(1, 1).Resize(CopyRange.Rows.Count, CopyRange.Columns.Count).Value = .Value
End With
Я занимался этим часами, но не могу найти решение онлайн. Я пробовал различные методы, но не знаю достаточно о сводных таблицах и о том, как они работают в коде VBA.
Любая помощь будет оценена.
РЕДАКТИРОВАТЬ:
Я получил 2-ую часть на работу, с помощью комментариев. Мне пришлось добавить PivotItem и изменить размер диапазона, к которому он добавлялся.
Третья часть все еще не работает. Он все еще копирует весь диапазон данных Value, когда я использую «Count of Sites». Это ошибка, когда я пытаюсь использовать PivotItem("Grand total")
или PivotItem("Row Grand Total")
Обновленный код выглядит следующим образом:
Dim rng As Range
Dim CopyRange As Range
Set rng = wsPivot.PivotTables("PvtSDCdata").RowRange
Set CopyRange = rng.Offset(2, 0).Resize(rng.Rows.Count - 2, rng.Columns.Count)
'1ST PART WORKS
With CopyRange
wb.Worksheets("Number of Stores Ranged").ListObjects("Table_Number_of_Stores_Ranged").DataBodyRange.Cells(1, 1).Resize(CopyRange.Rows.Count, CopyRange.Columns.Count).Value = .Value
End With
'2ND PART WORKS
Set rng = wsPivot.PivotTables("PvtSDCdata").PivotFields("MS").PivotItems("4").DataRange
With rng
wb.Worksheets("Number of Stores Ranged").ListObjects("Table_Number_of_Stores_Ranged").ListColumns("Number of Stores Ranged").DataBodyRange.Value = .Value
End With
'3RD PART NOT WORKING
Set rng = wsPivot.PivotTables("PvtSDCdata").PivotFields("Count of Site").DataRange
With rng
wb.Worksheets("Number of Stores Ranged").ListObjects("Table_Number_of_Stores_Ranged").ListColumns("Total Number of Stores : In Province").DataBodyRange.Value = .Value
End With
Я предполагаю, что проблема заключается в том, как сослаться на столбец "Общий итог"? Но я не могу понять, какой код VBA видит заголовок столбца, поскольку он не принимает методы, упомянутые выше.