Страницы: 1
RSS
Ошибка макроса при вставке сводной таблицы в определенное место
 
Всем доброго дня!

Помогите, пожалуйста, решить проблему с ошибкой в TableDestination при вставке нескольких сводных таблиц на один лист.

Задача: необходимо разместить на одном листе несколько сводных таблиц с использованием макроса.
Т.к. исходная таблица может быть больше или меньше по количеству строк, то использую следующий макрос:
Код
Dim wsh As Worksheet
Dim ptCache As PivotCache
Dim pt As PivotTable
Dim FinalRow As Long
Dim FinalCol As Long
Dim DestLoc As String
       
    
Set wsh = Worksheets("Исходная")
FinalRow = wsh.Cells(Application.Rows.Count, 1).End(xlUp).Row
FinalCol = wsh.Cells(Application.Columns.Count).End(xlToLeft).Column
    
Set ptCache = ActiveWorkbook.PivotCaches.Create(SourceType:=xlDatabase,_
              SourceData:=wsh.Name & "!R5C1:R" & FinalRow & "C" & FinalCol, Version:=6)
Set pt = ptCache.CreatePivotTable(TableDestination:="", TableName:="Сводная таблица2", DefaultVersion:=6)

With ActiveSheet
    .Name = "_Общая информация"
    .PivotTableWizard TableDestination:=ActiveSheet.Cells(3, 1)
End With

With ActiveSheet.PivotTables("Сводная таблица2").PivotFields("Поставщик")
    .Orientation = xlRowField
    .Position = 1
End With

ActiveSheet.PivotTables("Сводная таблица2").AddDataField ActiveSheet. _
        PivotTables("Сводная таблица2").PivotFields("ШТ"), _
        "Сумма по полю ШТ", xlSum


При этом первая сводная таблица вставляется на новый пустой лист, я лист переименовываю , все работает.

После вставки первой сводной таблицы пытаюсь вставить на этот же лист новую таблицу:

Код
FinalRow = ActiveSheet.Cells(Application.Rows.Count, 1).End(xlUp).Row + 7
DestLoc = "_Общая информация!R" & FinalRow & "C1"

Set pt = ptCache.CreatePivotTable(TableDestination:=DestLoc, TableName:="Сводная таблица3", DefaultVersion:=6)

With ActiveSheet.PivotTables("Сводная таблица3").PivotFields("Тип")
    .Orientation = xlRowField
    .Position = 1
End With

ActiveSheet.PivotTables("Сводная таблица3").AddDataField ActiveSheet. _
        PivotTables("Сводная таблица3").PivotFields("ШТ"), _
        "Сумма по полю ШТ", xlSum

И получаю ошибку:

Цитата

Run-Time Error '5':

Invalid procedure call or argument

При этом, если в TableDestination указывать "TableDestination:=""", то все работает, но таблица вставляется на новый чистый лист.

Пробовал вариант из этой темы - https://www.planetaexcel.ru/forum/index.php?PAGE_NAME=message&FID=1&TID=88812&MID=s - все равно ошибка :(

Пробовал явно указать место для вставки:

Код
Set pt = ptCache.CreatePivotTable(TableDestination:="_Общая информация!R27C1", TableName:="Сводная таблица3", DefaultVersion:=6)

все равно та же ошибка... :(

Подскажите, пожалуйста, в какую сторону копать?


В приложенном файле "Пример" на листе "_Общая информация" тот вид таблиц, который пытаюсь получить...

Если важно - Excel из состава Microsoft Office профессиональный плюс 2016...
 
Доброго.
Почему
Код
Dim DestLoc As String
?
Должен же быть Range?
и далее по коду:
Код
DestLoc = "_Общая информация!R" & FinalRow & "C1"
'а надо 
Set DestLoc = "_Общая информация!R" & FinalRow & "C1"

А то вы в параметры формирования таблицы пихаете строку, а надо ссылку на диапазон (ячейку)
Кому решение нужно - тот пример и рисует.
 
Цитата
написал:
Должен же быть Range?
Сменил тип на DestLoc co String на Range, в строке

Код
Set DestLoc = "_Общая информация!R" & FinalRow1 & "C1"

получаю ошибку "Type mismatch" :(
Изменено: Сергей - 08.12.2021 15:45:02
 
Код
FinalRow1

чему равно при выполнении этой инструкции?
Кому решение нужно - тот пример и рисует.
 
Цитата
написал:
чему равно при выполнении этой инструкции?
Я продолжал биться с проблемой :)
Пробовал задать значение переменной

Было так:

Код
Dim FinalRow1 As Long

FinalRow1 = 3
Set DestLoc = "_Общая информация!R" & FinalRow1 & "C1"

Спотыкается именно на Set.

Пробовал так:

Код
Set DestLoc = "_Общая информация!R120C1"

Другая ошибка - Object required...

 
Ну вы пытаетесь впихнуть в переменную, объявленную как Range строку (все, что в кавычках  - для программы строка)
Код
'присвоение переменной диапазона:
'правильно
Set MyRange = Range("A1")
Set MyRange = Worksheets("Лист1").Range("A1")
Изменено: Пытливый - 08.12.2021 16:06:35
Кому решение нужно - тот пример и рисует.
 
Код
'неправильно:
Set MyRange = "Range(A1)"
Кому решение нужно - тот пример и рисует.
 
Ураааа!

Заработало!!! Огромное спасибо!!!

:D  
Страницы: 1
Наверх