Установите источник серии диаграмм в именованный диапазон с помощью макроса

У меня есть лист с существующей диаграммой и правильными динамическими именованными диапазонами для подачи на эту диаграмму правильных данных.

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

ActiveChart.SeriesCollection(1).XValues = "=='Risk 1'!PDates"
ActiveChart.SeriesCollection(1).Values = "=='Risk 1'!Plan"
ActiveChart.SeriesCollection(2).XValues = "=='Risk 1'!ADates"
ActiveChart.SeriesCollection(2).Values = "=='Risk 1'!Actuals"

Я попытался сбросить их в именованные диапазоны с помощью модифицированной версии этого:

For Each Cht In TempSheet.ChartObjects
    'Series 1 is the Plan
    Cht.Activate 
    ActiveChart.SeriesCollection(1).XValues = "=='" & TempSheet.Name & "'!PDates"
    ActiveChart.SeriesCollection(1).Values = "=='" & TempSheet.Name & "'!Plan"

    'Series 2 is the Actuals
    ActiveChart.SeriesCollection(2).XValues = "=='" & TempSheet.Name & "'!ADates"
    ActiveChart.SeriesCollection(2).Values = "=='" & TempSheet.Name & "'!Actuals"
Next

Я столкнулся с ошибкой «Ошибка, определяемая приложением или объектом», в операторе, который пытается обновить значения X для первой серии.

Я также попытался добавить оператор выбора PlotArea на всякий случай, если это было проблемой, но это не решило проблему. Я проверил, что утверждения, которые должны быть установлены для коллекций, оцениваются правильно (например, "=='" & TempSheet.Name & "'!PDates" оценивается как «== 'Риск 1'! PDates», на что следует указывать серию).

С этим я довольно хорошо поставлен в тупик и буду признателен за любую помощь, которую кто-либо может предоставить. Заранее спасибо!


person JMichael    schedule 20.08.2014    source источник
comment
Проблема в том, что у вас есть два знака равенства подряд в начале формулы? Кроме этого, это должно работать.   -  person Jon Peltier    schedule 23.03.2015


Ответы (2)


Вместо того, чтобы использовать строку, которая пытается быть диапазоном, попробуйте реальный диапазон, а затем получите его значения:

ActiveChart.SeriesCollection(1).XValues = TempSheet.Range("PDates").Value

(так далее)

person James    schedule 20.08.2014
comment
Я попробовал, я не получил никаких ошибок, но когда я проверил источник серии вручную, он был установлен на = {#N/A,#N/A,#N/A,#N/A,# Н/Д,#Н/Д,#Н/Д,#Н/Д,#Н/Д,#Н/Д}. - person JMichael; 21.08.2014
comment
Когда я удалил .Value из конца каждого оператора, ряд закончился тем, что был установлен в диапазон, который охватывает именованный диапазон, который близок, но я действительно ищу, чтобы он был установлен в именованный диапазон (чтобы избежать чтобы обновить диапазон диаграммы, когда в исходный диапазон добавлено больше строк) - person JMichael; 21.08.2014
comment
В качестве примечания я реализовал код таким образом, что при добавлении новой строки в исходный диапазон диаграммы макрос, выполняющий это добавление, обновляет диаграмму, чтобы включить новую строку. Не идеально, но со своей задачей справляется. - person JMichael; 25.08.2014

Если рабочий лист «шаблон» содержит данные и диаграмму так, как вы хотите, но с фиктивными данными, сохраните его как официальный шаблон Excel. Затем, когда вам понадобится один из этих листов, щелкните правой кнопкой мыши вкладку листа и нажмите «Вставить...» Выберите шаблон в диалоговом окне и нажмите «ОК». Когда этот лист вставляется на основе шаблона, его диаграмма будет связана с Именами на листе.

person Jon Peltier    schedule 23.03.2015