Ссылка на существующую сводную диаграмму по имени

У меня есть несколько сводных диаграмм на листе. Как я могу сослаться на конкретную существующую сводную диаграмму по имени? В настоящее время у меня работает следующий код:

ThisWorkbook.Sheets("State").Shapes.AddChart2(XlChartType:=xlColumnStacked, Left:=140, Top:=0, Width:=800, Height:=550, NewLayout:=True).Select
ActiveChart.SetSourceData Source:=Range(ThisWorkbook.Sheets("State").PivotTables("StateTableName").TableRange2.Address)
ActiveChart.ChartTitle.Text = "State Resourcing"

Это нормально, когда вы впервые создаете диаграмму, но если мне нужно изменить формат существующей сводной диаграммы, мне нужно заменить ActiveChart. что-то вроде: ThisWorkbook.Sheets("State").ChartObjects("MyPivotChart").ChartTitle

Как я могу назвать сводную диаграмму, а затем ссылаться на нее по имени?


person S8eng    schedule 14.07.2020    source источник


Ответы (2)


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

Ваш код:

ThisWorkbook.Sheets("State").Shapes.AddChart2(XlChartType:=xlColumnStacked, Left:=140, Top:=0, Width:=800, Height:=550, NewLayout:=True).Select
ActiveChart.SetSourceData Source:=Range(ThisWorkbook.Sheets("State").PivotTables("StateTableName").TableRange2.Address)
ActiveChart.ChartTitle.Text = "State Resourcing"

просто добавь:

ActiveChart.Parent.Name = "MyPivotChart1" 'Chart Object keeps the name...

Тогда вы можете получить объект таким образом:

Dim chO as ChartObject
Set chO = sh.ChartObjects("MyPivotChart1")
Debug.Print chO.Chart.ChartTitle.Text
person FaneDuru    schedule 14.07.2020

Я обнаружил, что моя проблема заключалась в попытке использовать коллекцию ChartObjects вместо объекта Chart.

Я пытался использовать это (что не удалось):

ThisWorkbook.Sheets("MySheet").ChartObjects("MyPivotChart").ChartTitle.Text = "My Title"

Где правильный код:

ThisWorkbook.Sheets("MySheet").ChartObjects("MyPivotChart").Chart.ChartTitle.Text = "My Title"

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

person S8eng    schedule 14.07.2020