Создание сводной таблицы с динамическим диапазоном - PullRequest
0 голосов
/ 14 февраля 2019

Создание макроса, который может открывать несколько файлов и добавлять сводную таблицу к каждому.Все файлы отформатированы одинаково с «подробностями» рабочего листа, содержащими данные, необходимые для сводной таблицы.Однако каждый файл имеет разное количество строк, поэтому я пытаюсь использовать динамический диапазон для захвата всех данных в каждом файле.

Приведенная выше кодировка открывает файл и форматирует его по мере необходимости для работы с сводной таблицей.Таблица.

         'Set Dynamic Range

  Dim startCell As String
    Dim lastRow As Long
    Dim lastCol As Long
    Dim WS As String

    WS = "Details"
    Worksheets(WS).Activate

        'Find Last row and column

    lastRow = Cells(Rows.Count, Cells(1, 7).Column).End(xlUp).Row
    lastCol = Cells(1, Columns.Count).End(xlToLeft).Column

     Range(Cells(1, 7), Cells(lastRow, lastCol)).Select

   Range(Range("G1"), Range("G1").End(xlDown)).Select
   Range(Selection, Selection.End(xlToRight)).Select

          Selection.Name = "DynamicRange"

                     Sheets.Add After:=ActiveSheet

        ' Create Pivot Table

ActiveWorkbook.PivotCaches.Create(SourceType:=xlDatabase, SourceData:= _
    "DynamicRange", Version:=6).CreatePivotTable TableDestination:= _
    "Sheet1!R1C1", TableName:="PivotTable1", DefaultVersion:=6
Sheets("Sheet1").Select
Cells(1, 1).Select
With ActiveSheet.PivotTables("PivotTable1")
    .ColumnGrand = True
    .HasAutoFormat = True

Когда я попадаю в раздел «Создание сводной таблицы», первая строка дает мне код ошибки времени выполнения 1004.

1 Ответ

0 голосов
/ 14 февраля 2019

Вам следует избегать использования Select и Activate в максимально возможной степени.Я изменил ваш код ниже.Вы можете пересмотреть значения диапазона.Вам необходимо определить PivotCache и PivotTable до создания.

Dim startCell As String
Dim lastRow As Long
Dim lastCol As Long
Dim ws As Worksheet
Dim ws2 As Worksheet
Dim PvtCache As PivotCache
Dim PvtTab As PivotTable

Set ws = Sheets("Details")

'Find Last row and column

lastRow = ws.Cells(ws.Rows.Count, 7).End(xlUp).Row
lastCol = ws.Cells(1, Columns.Count).End(xlToLeft).Column

ws.Range(ws.Cells(1, 7), ws.Cells(lastRow, lastCol)).Name = "DynamicRange"
Set ws2 = Sheets.Add(After:=ws)
ws2.Name = "PvtTable"

' Create Pivot Table

Set PvtCache = ActiveWorkbook.PivotCaches.Create(SourceType:=xlDatabase, SourceData:=Range("DynamicRange"))

Set PvtTab = PvtCache.CreatePivotTable(ws2.Cells(1, 1), "MyTable")
...