Получить исходный диапазон сводной таблицы

Я создаю набор отчетов, которые будут обновляться ежедневно для некоторых пользователей, которые не очень хорошо разбираются в сводных диаграммах и сводных таблицах в Excel (2010). У меня есть данные из уже автоматизированного извлечения данных из нашей базы данных, но чтобы сделать эту информацию полезной (и более простой в использовании), я хочу сгенерировать сводные данные с помощью VBA.

Я уже создал сводные таблицы и могу вручную манипулировать ими для создания соответствующих диаграмм. Когда я создаю таблицы (все на одном листе), я их помечаю (если это помогает решить мою проблему). У меня возникают проблемы при создании сводных диаграмм и, в частности, при настройке источника данных.

Поскольку диаграммы основаны на опорных точках, размер которых может меняться в зависимости от имеющихся данных, я не могу просто указать фиксированный диапазон в качестве источника. Та же проблема с именованным диапазоном, так как я до сих пор не знаю, какому диапазону присвоить имя, если только я не могу назначить PT в качестве диапазона.

Я пробовал что-то вроде этого, но это не сработало, так как я не смотрю на реальный объект «Диапазон»:

Dim MyChartObject As ChartObject
Dim MyChart As Chart

'These variables are assigned elsewhere in the code.
Set MyChartObject = wksMainCharts.ChartObjects.Add( _
    iChartLeft, iChartTop, iChartWidth, iChartHeight)
Set MyChart = MyChartObject.Chart
MyChart.SetSourceData wksMainPivot.PivotTables(PivotName).SourceData 'Fails; requires Range object
'More code to follow...

Я знаю, что это строковое представление неправильного диапазона, но я играл с тем, что мог понять самостоятельно.

По сути, я хочу противоположного этого вопроса, который пытается найти сводную таблицу в заданный диапазон. Я также рассмотрел этот вопрос, но это не совсем то, что я ищу (ответы также отсутствуют).

Кроме того: я прошу здесь способ получить диапазон PT, который, я думаю, было бы интересно узнать, но в конечном итоге я просто хочу создать сводную диаграмму, поэтому, если кто-то хочет предложить лучший метод, чем то, что Я начал, я полностью открыт для этого.


person Gaffi    schedule 24.01.2013    source источник
comment
Для этой части не требуется VBA: просто создайте динамический именованный диапазон и используйте это имя в качестве источника для опорной точки. См. ответ в этом сообщении: superuser.com/questions/540307/   -  person Peter Albert    schedule 25.01.2013
comment
Спасибо за ссылку, @PeterAlbert. Возможно, я посмотрю на это в будущем (это очень крутая концепция!), но данные не импортируются в мою книгу. Скорее, извлечение данных создает файл Excel для каждого запуска. Затем я запускаю этот VBA для этих новых файлов с помощью надстройки. Ответ Сида, я думаю, лучше всего подходит для меня здесь.   -  person Gaffi    schedule 25.01.2013
comment
См. также ответ на этот вопрос: Как я могу получить объект ListObject сводной таблицы, если сводная таблица не связана с формальный Table (ListObject), свойство SourceData возвращает диапазон данных: ? activecell.PivotTable.PivotCache.SourceData   -  person GlennFromIowa    schedule 18.10.2017


Ответы (1)


Это то, чего вы пытаетесь достичь?

Sub Sample()
    Dim Chrt As Chart, pvtTbl As PivotTable

    Set pvtTbl = ActiveSheet.PivotTables(1)

    Set Chrt = ActiveSheet.ChartObjects(1).Chart

    Chrt.SetSourceData Source:=pvtTbl.TableRange1
End Sub

Итак, ваша эта линия

MyChart.SetSourceData wksMainPivot.PivotTables(PivotName).SourceData

становится

MyChart.SetSourceData wksMainPivot.PivotTables(PivotName).TableRange1
person Siddharth Rout    schedule 24.01.2013