powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / Обновить все сводные таблицы в книге с изменением исходного диапазона
9 сообщений из 9, страница 1 из 1
Обновить все сводные таблицы в книге с изменением исходного диапазона
    #34657782
Deggasad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Добрый вечер, я думаю под вечер как всегда зайдут бывалые и помогут мне немножко :)
Как то в справке не очень понял на эту тему
Есть книга в которой несколько сводных таблиц на основании одного ПивотКэша.
Как мне програмно изменять источник данных для ПивотКэша и обновлять все сводные???
Ну с обновлением проблем нет, а как источник менять. Источник лист Эксель, который после того как обновится ПивотКэш удаляется!

Что-то типа, но невыходит
Код: plaintext
1.
2.
ActiveWorkbook.PivotCaches( 1 ).SourceData = Range("ОБЩ_ПФ_ДЗ!A1:K" & _
    Sheets("ОБЩ_ПФ_ДЗ").Cells.Find("*", , , , xlByRows, xlPrevious).Row)
ActiveWorkbook.PivotCaches( 1 ).Refresh
...
Рейтинг: 0 / 0
Обновить все сводные таблицы в книге с изменением исходного диапазона
    #34657859
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DeggasadКак мне програмно изменять источник данных для ПивотКэша и обновлять все сводные???
Ну с обновлением проблем нет, а как источник менять. Источник лист Эксель, который после того как обновится ПивотКэш удаляется!Никак. Увы. .SourceData можно только читать, переопределять ее нельзя. Такое вот странное и непонятное ограничение.
Если надо переделать сводные таблицы на новоый лист-источник данных, то проще всего будет убивать все сводные таблицы построеные на этом кеше, убивать сам кеш, потом создавать новый кеш и заново создавать сводные таблицы.
Хотя лучше конечно либо не убивать лист источник а прятать его а потом просто заменять в нем данные. Либо использовать внешний источник (СУБД или хотя бы файл) тогда через PivotCash.Connection можно будет управлять местоположением источника.
...
Рейтинг: 0 / 0
Обновить все сводные таблицы в книге с изменением исходного диапазона
    #34658201
Deggasad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Спасибо за ответ.
Ну а ежели всё-таки попробовать, получается такакя вот лабуда

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
'Debug.Print ActiveWorkbook.PivotCaches.Count

Dim ws As Worksheet
Dim pt As PivotTable
Dim pvtCache As PivotCache

Set pvtCache = ActiveWorkbook.PivotCaches.Add( _
    SourceType:=xlDatabase, _
    SourceData:=Range("ОБЩ_ПФ_ДЗ!A1:K" & _
      Sheets("ОБЩ_ПФ_ДЗ").Cells.Find("*", , , , xlByRows, xlPrevious).Row))

'Debug.Print pvtCache.SourceData

For Each ws In ActiveWorkbook.Worksheets
  For Each pt In ws.PivotTables
    ws.Activate
    Range("A10").Select
        pt.PivotTableWizard _
            SourceType:=xlDatabase, _
            SourceData:=pvtCache.SourceData
  Next pt
Next ws

'Debug.Print ActiveWorkbook.PivotCaches.Count

Всё работает только ПИВОТКЭШов получается столько же сколько таблиц. а не 1.
Хотел первой табл диапазон определять, а остальным на основании неё, но чё-то не получилось
Код: plaintext
    ActiveSheet.PivotTableWizard SourceType:=xlPivotTable, SourceData:="СВод1"
Это записью получается, а при попытке постора Ошибку выдаёт
Подскажите Плиз если что сможете.
И ещё вопросик вы писали что ПивотКэш удалить. А как это сделать? Или когда таблицы удаляешь он сам удаляется?
...
Рейтинг: 0 / 0
Обновить все сводные таблицы в книге с изменением исходного диапазона
    #34658302
Deggasad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Долго не работал форум! Расскажу, что за это время придумал!
Все оказалось проще чем казалось! По крайней мере мой случай.
Я сделал на листе с исходными данными для сводных именованный диапазон. И из него сделал Пивот, на который ссылаются все сводные таблицы. А потом удаляю лист с исходными данными.
Теперь в любой момент могу переопределить именованный диапазон и обновить ПивотКэш, т.е. из кода осталось только такой кусок

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
With ThisWorkbook
' добавить динамический диапазон
  .Names.Add Name:="Диапазон", RefersTo:= _
     "=ОБЩ_ПФ_ДЗ!$A$1:$M$" & .Sheets("ОБЩ_ПФ_ДЗ").Cells.Find("*", , , , xlByRows, xlPrevious).Row
' проверка количества Пивотов
  If .PivotCaches.Count >  1  Then _
      MsgBox "Обрати внимание у тебя не 1 PivotCache, а " & .PivotCaches.Count
' обновление первого Пивота
  .PivotCaches( 1 ).Refresh
End With

Подставляя в именованный диапазон любой Range могу менять источник для все сводных в книге.
Главное чтобы поля в диапазоне совпадали с полями в существующих сводных и тогда не нужно сводные создавать каждый раз. Может это и непрофессионально, но мне нравится!
...
Рейтинг: 0 / 0
Обновить все сводные таблицы в книге с изменением исходного диапазона
    #34658349
Deggasad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вернее даже так
Код: plaintext
1.
2.
3.
With ThisWorkbook
  .Names("ДинамическийДиапазон").RefersTo = "=ОБЩ_ПФ_ДЗ!$A$1:$M$" & .Sheets("ОБЩ_ПФ_ДЗ").Cells.Find("*", , , , xlByRows, xlPrevious).Row
  .PivotCaches( 1 ).Refresh
 End With
...
Рейтинг: 0 / 0
Обновить все сводные таблицы в книге с изменением исходного диапазона
    #34658400
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DeggasadМожет это и непрофессионально, но мне нравится!Чем элегантней решение, тем оно лучше :)
...
Рейтинг: 0 / 0
Обновить все сводные таблицы в книге с изменением исходного диапазона
    #34658442
Deggasad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DeggasadВернее даже так
Код: plaintext
1.
2.
3.
With ThisWorkbook
  .Names("ДинамическийДиапазон").RefersTo = "=ОБЩ_ПФ_ДЗ!$A$1:$M$" & .Sheets("ОБЩ_ПФ_ДЗ").Cells.Find("*", , , , xlByRows, xlPrevious).Row
  .PivotCaches( 1 ).Refresh
 End With


Всё таки так хреново. Чё-то не всегда получается и стиль ссылок соскакивает на R1C1 сам, чё то не пойму. Может кто подскажет как правильно задать свойство RefersTo определённому имени!
Пока пользуюсь первым вариантом.
...
Рейтинг: 0 / 0
Обновить все сводные таблицы в книге с изменением исходного диапазона
    #34658577
yuniki
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DeggasadЧё-то не всегда получается и стиль ссылок соскакивает на R1C1 сам
А если вместо
Код: plaintext
.Sheets("ОБЩ_ПФ_ДЗ").Cells.Find("*", , , , xlByRows, xlPrevious).Row
ставить константу - все-равно будет соскакивать ?

2) Не пойму - именованный диапазон меняется по кол-ву строк и столбцов и потом на основе нового диапазона требуется сводную обновить ?
...
Рейтинг: 0 / 0
Обновить все сводные таблицы в книге с изменением исходного диапазона
    #34658764
Deggasad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
yuniki
А если вместо
Код: plaintext
.Sheets("ОБЩ_ПФ_ДЗ").Cells.Find("*", , , , xlByRows, xlPrevious).Row
ставить константу - все-равно будет соскакивать ?


Да всё равно соскакивает. И вообще без конца ошибку выдаёт, не пойму как задать правильно
Вернулся к первоначальному варианту, каждый раз добавляю с тем же именем и имя заменяется
Код: plaintext
1.
Names.Add Name:="ДинамическийДиапазон", RefersTo:= _
     "=ОБЩ_ПФ_ДЗ!$A$1:$M$" & .Sheets("ОБЩ_ПФ_ДЗ").Cells.Find("*", , , , xlByRows, xlPrevious).Row
Работает нормально, просто хотелось как то по правильному.

yuniki
2) Не пойму - именованный диапазон меняется по кол-ву строк и столбцов и потом на основе
нового диапазона требуется сводную обновить ?

Да вопроса уже и нет по сути. Был вопрос такой:
Как всем сводным в книге подсовывать новый диапазон с исходными данными если исходные данные на листе. который создаётя програмно и удаляется по завершении процедуры.
Сложность: Нельзя менять источник ПивотКэша.
Выход(мой): ПивотКэш создаётся на основе именованного диапазона
И когда листа с исходными данными нет обновить пивот нельзя
А когда програмно создаю лист, делаю новый диапазон с таким именем как исходный для пивота и обновляю пивот. Он находит имя на которое ссылался и обновляется. а так как все сводные таблицы в книге заблаговременно созданы на основе этого пивота, то они все обновляются на этот новый диапазон.
...
Рейтинг: 0 / 0
9 сообщений из 9, страница 1 из 1
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / Обновить все сводные таблицы в книге с изменением исходного диапазона
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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