Цитирование через рабочий лист для создания графика в VBA

Я пытаюсь создать график, основанный на некоторых данных из листа. У меня есть код, который создает граф.

ПРОБЛЕМА Я пытаюсь прокрутить листы в моей книге, чтобы проверить, существует ли граф, в этом случае я активирую его, очищаю предыдущие данные и вставляю новые данные.

Если это не так, я создаю новый граф и вставляю данные.

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

Любые идеи о том, что делать?

Текущий код (только соответствующая часть)

Set RetRange = w.Sheets("Ret").UsedRange ' Set RetRange = w.Sheets("Returns Output").Range(w.Sheets("Ret").Cells("A1").SpecialCells(xlLastCell)) 'if graph is already there, change Set RetChart = Nothing For Each ws In w.Worksheets If ws.Name = "RetGraph" Then Set RetChart = Charts("Ret").Activate Else End If Next ws If RetChart = Nothing Then Set RetChart = Charts.Add End If With RetChart .Select .ChartType = xlLine .HasTitle = True .ChartTitle.Text = "Index Performance" .SetSourceData Source:=RetRange .Axes(xlCategory, xlPrimary).HasTitle = True .Axes(xlCategory, xlPrimary).AxisTitle.Characters.Text = "Date" .Axes(xlValue, xlPrimary).HasTitle = True .Axes(xlValue, xlPrimary).AxisTitle.Characters.Text = "Return" .Name = "RetGraph" .Legend.Select Selection.position = xlBottom End With End Sub 

Name «Ret» является свойством ChartObject , а не Chart .

Самая высокая иерархия – ChartObject , под ней вы можете найти Chart , Name и многие другие, см. ChartObject диаграмму ниже:

 ChartObject --> Chart |--> ChartArea |--> Axes |--> SeriesCollection |--> Format.Line --> Name --> Top --> Left --> Height --> Width 

Комментарий . Я рекомендую использовать ChartObject а затем вы можете легко ChartObject под ним, чтобы изменить все остальные свойства. Кроме того, почти нет причин использовать Select и Selection но ise полностью квалифицированные ChartObjects и это вложенные свойства.

В приведенном ниже коде будут ChartObjects все ChartObjects Worksheets , а затем для каждой ChartObjects будет проходить через все ChartObjects и искать «Ret».

Код

 Option Explicit Sub LoopSheets_ChartObjects() Dim RetChart As Chart Dim ChtObj As ChartObject Dim ws As Worksheet Dim w As Workbook Set w = ThisWorkbook For Each ws In w.Worksheets If ws.Name = "RetGraph" Then For Each ChtObj In ws.ChartObjects If ChtObj.Name = "Ret" Then '<-- if there is a match Set RetChart = ChtObj.Chart ' <-- set chart to ChartObject.Chart End If Next ChtObj End If Next ws If RetChart Is Nothing Then MsgBox "NOT Found" ' do your coding stuff End If End Sub 

Редактировать 1 : для поддержки новой информации ПО диаграмма помещается в Лист диаграммы.

 Dim RetChart As Chart Dim Cht_Sht As Chart For Each Cht_Sht In w.Charts If Cht_Sht.Name = "RetGraph" Then Set RetChart = Cht_Sht End If Next Cht_Sht If RetChart Is Nothing Then MsgBox "NOT Found" ' do your coding stuff Else ' <-- chart found RetChart.ChartTitle.Text = "Test" '<-- for debug only End If 

вы можете избежать обхода листов

 Dim RetChart As Chart On Error Resume Next Set RetChart = w.Charts("RetGraph") On Error GoTo 0 If RetChart Is Nothing Then '<--| chart not found MsgBox "NOT Found" ' do your coding stuff Else ' <--| chart found RetChart.ChartTitle.Text = "Test" '<-- for debug only End If 
  • VBA Macro для извлечения данных из диаграммы в Excel 2007, 2010 и 2013 годах
  • Проверить формулу серийной сборки в Excel
  • Повторные вызовы Chart.SetSourceData дают ошибку 1004
  • Копирование фигур (особенно диаграмм) с помощью SpreadsheetGear
  • Цвет линии / цвета маркерной линии Excel VBA
  • Применение класса к нескольким объектам диаграммы - VBA
  • Шкала оси диаграммы Excel
  • VBA, форматирование оси диаграммы Excel
  • Добавление заголовков диаграмм и названий осей в группированные диаграммы
  • Создайте гистограмму с упорядоченными двоичными данными
  • Установите массив в Chart.SeriesCollection (). Значения
  • Давайте будем гением компьютера.