Изменение цвета границы выделенной диаграммы

Если я запишу макрос Excel, чтобы изменить цвет границы диаграммы, VBA вернет

Sub change_bordercolor()
    With ActiveSheet.Shapes("Chart 1").Line
        .Visible = msoTrue
        .ForeColor.RGB = RGB(0, 0, 0)
        .Transparency = 0
    End With
End Sub

поэтому я хотел закодировать, чтобы изменить цвет границы не "Chart 1", а текущей выбранной диаграммы, как показано ниже.

Sub change_bordercolor()
    Selection.ShapeRange.Line.ForeColor.RGB = RGB(0, 0, 0)
End Sub

но это возвращает ошибку времени выполнения 438. Где мне нужно изменить, чтобы использовать Selection вместо "Chart 1?


person Junyong Kim    schedule 06.10.2020    source источник
comment
Я обнаружил, что выбор диаграмм доставляет гораздо больше хлопот, чем его ценность, и вызывает больше хлопот, чем обычные .Select проблемы. Обязательно ли выбирать диаграмму? И просто запустить код на одной диаграмме?   -  person Mr.Burns    schedule 06.10.2020
comment
да. Я надеюсь использовать selection. Мой sub вставляет новые диаграммы, например, с помощью ActiveSheet.Shapes.AddChart2(-1, xlXYScatter).Select, а затем выполняет некоторые микроуправления, такие как ActiveChart.SetElement (msoElementChartTitleNone) . Я хочу добавить еще одну строку, чтобы изменить цвет границы новых диаграмм при их добавлении.   -  person Junyong Kim    schedule 06.10.2020


Ответы (2)


Чтобы изменить цвет границы активного графика, который вы должны были выбрать, вы можете использовать этот код:

Sub Macro1()

If Application.ActiveChart Is Nothing Then Exit Sub


With ActiveSheet.Shapes(Replace(Application.ActiveChart.Name, ActiveSheet.Name & " ", "")).Line
    .Visible = msoTrue
    .ForeColor.RGB = RGB(0, 255, 0)
    .Transparency = 0
End With

End Sub

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

введите описание изображения здесь

Он изменяет цвет границы активного выбранного графика.

person Foxfire And Burns And Burns    schedule 06.10.2020
comment
Спасибо. Могу я спросить еще один? Этот код переносит часть "Chart 1" из Application.ActiveChart.Name, но нужна ли Application перед ActiveChart? Иногда я вижу Application.ActiveSheet, иногда просто ActiveSheet, но когда мне это конкретно нужно? - person Junyong Kim; 06.10.2020
comment
Нет, в этом случае это действительно не нужно. Вам просто понадобится объектное приложение, если вы работаете с разными экземплярами Excel (не в этом случае). Я использую его, чтобы использовать Intellisense и код быстрее, но это не так. нужный. - person Foxfire And Burns And Burns; 06.10.2020

Вот более простой подход:

Sub ChangeBorderColor()
  If Not ActiveChart Is Nothing Then
    With ActiveChart.ChartArea.Format.Line
      .Visible = msoTrue
      .ForeColor.RGB = RGB(0, 0, 0)
      .Transparency = 0
    End With
  End If
End Sub
person Jon Peltier    schedule 08.10.2020
comment
Большое спасибо. Я думаю, что самый простой подход - ActiveChart.ChartArea.Format.Line.ForeColor.RGB = RGB(0, 0, 0). - person Junyong Kim; 08.10.2020