У меня есть лист Excel с двумя объектами диаграммы (круговая диаграмма и линейный график).У меня есть отдельные кнопки для генерации каждого графика, и я хочу удалять соответствующий ранее существующий график при каждом нажатии кнопки генерации.Сейчас я пытаюсь получить доступ к свойству Name объекта диаграммы, чтобы определить, нужно ли удалять диаграмму.Код удаления выглядит следующим образом:
For i = 1 To ActiveSheet.ChartObjects.Count
If ActiveSheet.ChartObjects(i).Chart.Name = "Genre" Then
ActiveSheet.ChartObjects("Genre").Delete
End If
Next i
Вот код, который генерирует круговую диаграмму:
Range("A2:B16").Select
ActiveSheet.Shapes.AddChart.Select
ActiveChart.ChartType = xlPie 'Exploded
ActiveChart.SetElement (msoElementChartTitleAboveChart)
ActiveChart.ChartTitle.Text = "Genre Breakdown"
ActiveChart.Parent.Name = "Genre"
Dim ChartSize As ChartObject
Set ChartSizing = Worksheets("Graphs and Stats").ChartObjects("Genre")
With ChartSizing
.Top = Range("D2").Top
.Width = Range("D2:H23").Width
.Height = Range("D2:H23").Height
.Left = Range("D2").Left
End With
В настоящее время оператор If в цикле удаления for никогда не разрешается как true иЯ не понимаю почему.Что не так с этой линией и / или есть ли лучшая логика, которую я мог бы использовать для проверки уже существующих графиков?Я бы предпочел не использовать
ActiveSheet.ChartObjects.Delete
, если я могу избежать того, чтобы кнопки генерации были отделены друг от друга.
РЕДАКТИРОВАТЬ: Исправленный код (где имя рабочей таблицы«Графики и статистика») с использованием решения Dammer15:
For i = 1 To ActiveSheet.ChartObjects.Count
If ActiveSheet.ChartObjects(i).Chart.Name = "Graphs and Stats Genre" Then
ActiveSheet.ChartObjects("Genre").Delete
End If
Next i
Set Rng = ActiveSheet.Range("A2:B16")
Set GenreChart = ActiveSheet.Shapes.AddChart
GenreChart.Name = "Genre"
With GenreChart.Chart
.SetSourceData Source:=Rng
.ChartType = xlPie
.SetElement (msoElementChartTitleAboveChart)
.ChartTitle.Text = "Genre Breakdown"
End With