Здравствуйте, всем! Маловато опыта, столкнулся с проблемой. В файле есть два листа со сводными таблицами, ссылающимися на один и тот же кэш (настраиваются по разному). Ранее столкнулся с тем, что выключалась галочка сохранения исходных данных, поэтому напрямую для каждой таблицы прописал включение этой галочки. [vba]
[/vba] Но при этом получил задвоение кэша и, соответственно размера файла. Может кто помочь? Файл не прикладываю, как мне кажется, вопрос общий (если ошибаюсь, припарюсь на создание образца).
Здравствуйте, всем! Маловато опыта, столкнулся с проблемой. В файле есть два листа со сводными таблицами, ссылающимися на один и тот же кэш (настраиваются по разному). Ранее столкнулся с тем, что выключалась галочка сохранения исходных данных, поэтому напрямую для каждой таблицы прописал включение этой галочки. [vba]
[/vba] Но при этом получил задвоение кэша и, соответственно размера файла. Может кто помочь? Файл не прикладываю, как мне кажется, вопрос общий (если ошибаюсь, припарюсь на создание образца).pabchek
"Учиться, учиться и еще раз учиться!" WM: R399923528092
Решил проблему, но не вопрос. Диапазон сводной задал через именованный диапазон
Код
=SI!$A$1:ИНДЕКС(SI!$N:$N;СЧЁТЗ(SI!$A:$A))
И блок назначения галочек сохранения исходных данных убрал совсем. Собственно, это можно было сразу сделать, но очень не люблю такие глобальные ссылки. Тем более что в таблице больше полумиллиона строк. Тем не менее, если кто знает, как решить первичный вопрос, был бы благодарен за подсказку.
Решил проблему, но не вопрос. Диапазон сводной задал через именованный диапазон
Код
=SI!$A$1:ИНДЕКС(SI!$N:$N;СЧЁТЗ(SI!$A:$A))
И блок назначения галочек сохранения исходных данных убрал совсем. Собственно, это можно было сразу сделать, но очень не люблю такие глобальные ссылки. Тем более что в таблице больше полумиллиона строк. Тем не менее, если кто знает, как решить первичный вопрос, был бы благодарен за подсказку.pabchek
"Учиться, учиться и еще раз учиться!" WM: R399923528092
Sub d() Dim pc As PivotCache, p1 As PivotTable, p2 As PivotTable Set pc = ActiveWorkbook.PivotCaches.Create(SourceType:=xlDatabase, SourceData:=Sheets(1).Range("a1:b15000"))
Set p1 = Sheets(2).PivotTables("Сводная таблица1") Set p2 = Sheets(2).PivotTables("Сводная таблица2")
With p1 .SaveData = False .ChangePivotCache pc End With
With p2 .SaveData = False .CacheIndex = p1.CacheIndex .SaveData = True End With End Sub
[/vba]
Фишка в том, что для второй сводной нужно просто применить CacheIndex 1-й сводной Почитать можно тут
Если источник одинаков, то (теоретически), достаточно поставить только одну галку
Таки да. Главное чтобы CacheIndex одинаковый был
ЗЫ проверить количество кешей можно так: [vba]
Код
Sub d1() Dim pc As PivotCache For Each pc In ActiveWorkbook.PivotCaches Debug.Print pc.Index; " "; pc.SourceData; " "; pc.Parent.Name Next End Sub
[/vba]
А если так: [vba]
Код
Sub d() Dim pc As PivotCache, p1 As PivotTable, p2 As PivotTable Set pc = ActiveWorkbook.PivotCaches.Create(SourceType:=xlDatabase, SourceData:=Sheets(1).Range("a1:b15000"))
Set p1 = Sheets(2).PivotTables("Сводная таблица1") Set p2 = Sheets(2).PivotTables("Сводная таблица2")
With p1 .SaveData = False .ChangePivotCache pc End With
With p2 .SaveData = False .CacheIndex = p1.CacheIndex .SaveData = True End With End Sub
[/vba]
Фишка в том, что для второй сводной нужно просто применить CacheIndex 1-й сводной Почитать можно тут
Может я что то не так сделал - но у меня с таким подходом кеши задваиваются - см. Файл - запустите сначала d а потом d1 А вот если раскомментировать строку: [vba]
Код
.CacheIndex = p1.CacheIndex
[/vba] - то все пучком На сколько я понял из ссылки - excel сам не сравнивает кэши и их адреса - поэтому при обычном ChangePivotCache сначала разрывает связи со старым кешем а потом создает новый кэш. Чего не происходит если ему тыкнуть принудительно нужный кэш.
Может я что то не так сделал - но у меня с таким подходом кеши задваиваются - см. Файл - запустите сначала d а потом d1 А вот если раскомментировать строку: [vba]
Код
.CacheIndex = p1.CacheIndex
[/vba] - то все пучком На сколько я понял из ссылки - excel сам не сравнивает кэши и их адреса - поэтому при обычном ChangePivotCache сначала разрывает связи со старым кешем а потом создает новый кэш. Чего не происходит если ему тыкнуть принудительно нужный кэш.SLAVICK
Ярослав, у меня твои макросы вообще не работают. Ругаются на .SaveData = False. Предположу, что зависит от версии Excel (вернее, версии сводной). Я делал в 2013, а в 2007 (как у Виктора) сейчас не могу поиграться, только дома.
Ярослав, у меня твои макросы вообще не работают. Ругаются на .SaveData = False. Предположу, что зависит от версии Excel (вернее, версии сводной). Я делал в 2013, а в 2007 (как у Виктора) сейчас не могу поиграться, только дома._Boroda_