У меня есть несколько сводных таблиц, которые берут данные из одного исходного листа. Время от времени данные будут обновляться с помощью макроса таким образом, что все существующие удаляются и перезаписываются новыми. Номер столбца в наборе данных является фиксированным, однако после обновления строки могут изменяться в любом случае, поэтому мне нужна ссылка на источник динамических данных для моих сводных точек. Я получил код VBA:
Public Sub pivotr()
Dim SrcData As String
Dim PivTbl As PivotTable
Dim ws, sheet As Worksheet
Dim lastrow As Long
Set ws = ActiveWorkbook.Worksheets("PivotData")
lastrow = Worksheets("PivotData").Cells(Worksheets("PivotData").Rows.Count, "B").End(xlUp).Row
SrcData = ws.Name & "!" & Range("$A$1:$K$" & lastrow).Address(ReferenceStyle:=xlR1C1)
For Each sheet In ActiveWorkbook.Worksheets
For Each PivTbl In sheet.PivotTables
PivTbl.SourceData = SrcData
PivTbl.RefreshTable
Next PivTbl
Next sheet
End Sub
Я считаю, что это не идеальное и быстрое решение вообще, но так как набор данных невелик, я был в порядке с этим, пока не захотел добавить срезы и временную шкалу в свои сводные таблицы. После повторного открытия книги я начал получать уведомления о том, что она повреждена, и Excel нужно ее починить. Исправив, он удалил мои слайсеры / сроки и их кеш. Итак, я обнаружил, что сбой связан исключительно со срезами / временными рамками, и обнаружил в одном посте аналогичную проблему - автору посоветовали не использовать макрос для обновления сводной таблицы и пробовать без него. Итак, вот вопрос - возможно ли, что мой макрос может привести к сбою срезов / кешей? Можно ли просто добавить что-то вроде
Cache.Clear
чтобы избежать этого? И последнее, как насчет использования еще более простого способа для источника данных сводной таблицы - просто введите:
Sheet!$A:$K
т.е. выбрать целые столбцы на листе, где данные могут появиться после обновления? Будет ли это работать и почему или почему нет, это жизнеспособный вариант? Заранее спасибо!