Удаление определенных объектов ChartObject по имени Свойство Excel VBA - PullRequest
0 голосов
/ 23 октября 2018

У меня есть лист 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

1 Ответ

0 голосов
/ 23 октября 2018

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

'List of Chart Objects
Dim ChartList As ChartObjects

'The square that holds the chart
Dim MyChartFrame As ChartObject
Dim ChartToDelete As ChartObject

'The Physical chart with data
Dim MyChart As Chart

'Accessing the Objects
Set ChartList = Sheet1.ChartObjects
Set MyChartFrame = Sheet1.ChartObjects(1)
Set MyChart = MyChartFrame.Chart

Dim ChartName As String

'Remove SheetName from ChartName!!!!
ChartName = MyChart.Name

'Deleting Chart
Set ChartToDelete = Sheet1.ChartObjects(ChartName)
ChartToDelete.Delete

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...