Гость
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / EXCEL Копирование сводной таблицы / 5 сообщений из 5, страница 1 из 1
13.07.2017, 12:15
    #39488228
Yagrus2
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
EXCEL Копирование сводной таблицы
Hello world!
Нужно копировать сводную таблицу с одного листа на другой

Переработав вариант предложенный МакроРекордером получил такой способ(первый):
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
Sub version1()
    Dim WorkSht1 As Worksheet
    Dim WorkSht2 As Worksheet
    ' Лист (Источник) - со сводной таблицей
    Set WorkSht1 = ThisWorkbook.Worksheets("Производители")
    ' Лист (Назначение) - куда делаем вставку
    Set WorkSht2 = ThisWorkbook.Worksheets("Произв. Детализация")
    ' Очистка старой информации на Листе (Назначение)
    WorkSht2.Cells.Clear
    ' Копирование
    WorkSht1.PivotTables("PVT_Произв").PivotSelect "", xlDataAndLabel, True
    Selection.Copy
    WorkSht2.Paste
    Application.CutCopyMode = False
End Sub


Но здесь мне не нравится использование ВЫДЕЛЕНИЯ.

Далее пришла идея использовать CurrentRegion. Собственно способ(второй):
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
Sub version2()
    Dim WorkSht1 As Worksheet
    Dim WorkSht2 As Worksheet
    Dim Rows, Cols As Integer
    ' Лист (Источник) - со сводной таблицей
    Set WorkSht1 = ThisWorkbook.Worksheets("Производители")
    ' Лист (Назначение) - куда делаем вставку
    Set WorkSht2 = ThisWorkbook.Worksheets("Произв. Детализация")
    ' Очистка старой информации на Листе (Назначение)
    WorkSht2.Cells.Clear
    'Соединяю две области сводной таблицы
    WorkSht1.Cells(9, 1) = "Temp"
    ' Получаю область сводной таблицы как текущую
    Rows = WorkSht1.Cells(10, 1).CurrentRegion.Rows.Count
    Cols = WorkSht1.Cells(10, 1).CurrentRegion.Columns.Count
    ' Копирование рассчитанного диапазона ячеек
    WorkSht1.Range(WorkSht1.Cells(1, 1), WorkSht1.Cells(Rows, Cols)).Copy Destination:=WorkSht2.Range("A1")
    ' Очистка технической ячейки
    WorkSht1.Cells(9, 1).Clear
    WorkSht2.Cells(9, 1).Clear
End Sub


Но здесь, тоже попахивает кустарным методом.

Интересует более изящный вариант, возможно с использованием PivotCache.

Как правильно(красиво) копировать сводную таблицу с одного листа на другой?
...
Рейтинг: 0 / 0
13.07.2017, 13:01
    #39488316
Yagrus2
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
EXCEL Копирование сводной таблицы
Вот скрин, поясняющий для чего нужна "техническая ячейка"
...
Рейтинг: 0 / 0
13.07.2017, 13:02
    #39488317
Yagrus2
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
EXCEL Копирование сводной таблицы
...
Рейтинг: 0 / 0
13.07.2017, 14:51
    #39488447
iMrTidy
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
EXCEL Копирование сводной таблицы
Yagrus2,

Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
Option Explicit

Sub CopyMyPivot()

Dim wb As Workbook
Dim sh As Worksheet
Dim pt As PivotTable
Dim rn As Range

Set wb = ThisWorkbook
Set sh = wb.Sheets(2)
Set pt = sh.PivotTables("PivotTable1")
Set rn = sh.Range("Q1")

pt.TableRange2.Copy rn

End Sub



Или в одну строку:

Код: vbnet
1.
ThisWorkbook.Sheets(2).PivotTables("PivotTable1").TableRange2.Copy ThisWorkbook.Sheets(2).Range("Q1")



Индекс/имя листа, а также куда копировать переделайте под Ваши нужды.
...
Рейтинг: 0 / 0
14.07.2017, 18:30
    #39489308
Yagrus2
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
EXCEL Копирование сводной таблицы
iMrTidy,
Огромное спасибо!
...
Рейтинг: 0 / 0
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / EXCEL Копирование сводной таблицы / 5 сообщений из 5, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]