Страницы: 1
RSS
Стиль ссылок при работе с PivotTables, Зачем-то приходится инвертировать стиль ссылок при работе с PivotTables
 
Столкнулся с необходимостью инвертировать стиль ссылок при работе с PivotTables при изменении  источника данных сводной таблицы, иначе ругается.
Но зачем и почему?   Или лыжи невиноваты ?


Код
''''''''''''' зачем-то инвертируем стиль ссылок при формировании сроки адреса диапазона данных сводной
bRefStyle = iif(Application.ReferenceStyle= 1, -4150, 1)
 
''''''''''''''''''''''''''формируем сроку адреса диапазона данных сводной
sPtData = ФайлПодтверждения.Path & "\" & "[" & ФайлПодтверждения.Name & "]" & ФайлПодтверждения.Worksheets(4).Name & "!" & ФайлПодтверждения.Worksheets(4).[a1].CurrentRegion.Address(, , bRefStyle)

''''''''''''''''''''''''прогружаем диапазон данных сводной
ActiveSheet.PivotTables("СводнаяТаблица1").ChangePivotCache ActiveWorkbook. _
        PivotCaches.Create(SourceType:=xlDatabase, SourceData:= _
        sPtData _
        , Version:=xlPivotTableVersion10)
 
Боюсь, что содержание "ругани" без примера трудно идентифицировать.
Владимир
 
Столбенко Владислав, точно инвертировать? Или указывать в стиле R1C1? Пробовали переключать на стиль R1C1 и запускать код?
 
ну ожидает оно в R1С1 стиле, чай не первый случай. При этом всегда, выяснять ничего ненужно, просто .address(,,xlR1C1)
По вопросам из тем форума, личку не читаю.
 
Цитата
БМВ написал:
ожидает оно в R1С1 стиле,
Здравствуйте, Михаил! Обычно понимает и в A1, любопытно было бы взглянуть на пример.
Владимир
 
sokol92, ну может если объект передавть, а не строку
Код
set sPtData = ФайлПодтверждения.Worksheets(4).[a1].CurrentRegion
 
''''''''''''''''''''''''прогружаем диапазон данных сводной
ActiveSheet.PivotTables("СводнаяТаблица1").ChangePivotCache ActiveWorkbook. _
        PivotCaches.Create(SourceType:=xlDatabase, SourceData:= _
        sPtData _
        , Version:=xlPivotTableVersion10)
Изменено: БМВ - 19.11.2018 20:11:56
По вопросам из тем форума, личку не читаю.
 
БМВ, можно, но не рекомендуется - может вызвать ошибку "несовпадение типа"
Цитата
https://docs.microsoft.com/en-us/office/vba/api/excel.pivotcaches.create

The SourceData argument is required if SourceType isn't xlExternal . It should be passed a Range (when SourceType is either xlConsolidation or xlDatabase) or an Excel Workbook Connection object (when SourceType is xlExternal). When passing a Range, it is recommended to either use a string to specify the workbook, worksheet, and cell range, or set up a named range and pass the name as a string. Passing a Range object may cause "type mismatch" errors unexpectedly.
 
Казанский, я обычно в таких случаях могу сказать только- "Ну я то, я то куда полез?" :-) .  
Конечно это было мое предположение, которое сработает наверно, но Вы правы если это не рекомендуется, то лучше этого не делать.
По вопросам из тем форума, личку не читаю.
 
Алексей меня опередил на несколько секунд :)  Пример с работающим (проверил на 2007 и  2016) стилем A1.
Владимир
 
Цитата
БМВ написал:
ну ожидает оно в R1С1 стиле, чай не первый случай. При этом всегда, выяснять ничего ненужно, просто .address(,,xlR1C1)
А вот и не факт, начинает "козлить"  если при открытом файле сводной меняется стиль ссылок в настройках (я менял вручную).
Прикладываю файл с рабочим примером с инверсией стиля ссылок диапазона данных сводной. Кстати припоминаю что подобная свистопляска была с установкой области печати.
Установлен 2013
 
Изменено: Столбенко Владислав - 20.11.2018 09:43:30
 
"Свистопляска" из-за пробелов в имени листа. Так должно работать (в Ваших обозначениях):

Код
''''''''''''''''''''''''''формируем сроку адреса диапазона данных сводной
sPtData = Worksheets(2).[a1].CurrentRegion.Address(external:=True)
''''''''''''''''''''''''прогружаем диапазон данных сводной
Worksheets(1).Activate
ActiveSheet.PivotTables("СводнаяТаблица1").ChangePivotCache ActiveWorkbook. _
   PivotCaches.Create(SourceType:=xlDatabase, SourceData:= _
   sPtData)
Владимир
 
Цитата
sokol92 написал:
"Свистопляска" из-за пробелов в имени листа.

Да, действительно с .Address(external:=True)  все заработало как нужно и  без странных костылей, спасибо.
Однако встает вопрос как же эти кривые костыли с перевертыванием стиля ссылок работали ? Но то ладно, уже пустое.    
 
Если имя листа содержит пробелы и некоторые специальные символы, то оно в ссылках на диапазоны дожно быть заключено в апострофы. Excel иногда делает "послабления" для этого правила, однако полагаться на это не стоит.
Владимир
 
Цитата
sokol92 написал:
Excel иногда делает "послабления" для этого правила, однако полагаться на это не стоит
Так оно и было, Первоначально я собирал адрес с апострофами, но в процессе "оптимизации" они "отвалились" и до переключения  руками в настройках стиля ссылок ничто не предвещало проблем.  
Страницы: 1
Наверх