【发布时间】:2019-11-14 16:13:22
【问题描述】:
一直在尝试通过 VBA 更改 Excel 中特定图表的系列颜色。我有更改所有图表的代码 - 这很方便,但并非所有图表都具有相同数量的系列。这是我到目前为止所拥有的。例如,如果我只想更改图表 4 的系列颜色。
Sub Serieschange()
Dim myChart As ChartObject
For Each myChart In Sheets("Sheet1").ChartObjects
myChart.Chart.ChartType = xlXYScatterSmoothNoMarkers
myChart.Chart.SeriesCollection(1).Format.Line.ForeColor.RGB = RGB(255, 0, 0)
myChart.Chart.SeriesCollection(2).Format.Line.ForeColor.RGB = RGB(50, 656, 989)
myChart.Chart.SeriesCollection(3).Format.Line.ForeColor.RGB = RGB(60, 2, 5)
myChart.Chart.SeriesCollection(4).Format.Line.ForeColor.RGB = RGB(20, 900, 3)
'TRY TO GET CODE TO LOOP FOR SPECIFIC CHARTS
'If ChartObjects = ChartObjects("Chart 4") Then
'myChart.Chart.SeriesCollection(1).Format.Line.ForeColor.RGB = RGB(3, 0, 0)
'myChart.Chart.SeriesCollection(2).Format.Line.ForeColor.RGB = RGB(2, 656, 989)
'myChart.Chart.SeriesCollection(3).Format.Line.ForeColor.RGB = RGB(1, 2, 5)
'End If
Next myChart
End Sub
【问题讨论】:
-
我会使用一个辅助函数,为每个带有选择案例的系列返回一个 RGB 颜色数组。然后我会使用数组 ubound + 1 遍历系列,这将匹配系列的数量。
-
您想遍历每个图表的所有
SeriesCollection对象以使您的代码更具可读性吗?我不太明白你想在这里完成什么。有时循环不是最佳选择,尤其是当您需要以不同方式修改每个条目时。 -
感谢您的回复。基本上我有一张有 6 个图表的表格。其中 4 个有 5 个系列,其中 2 个有 3 个系列。我正在尝试将前 4 个更改为完全相同,而将后 2 个更改为完全相同。我正在考虑编写这个 VBA 来循环遍历所有图表并更改颜色,然后放置一个 IF 语句来更改最后 2 个图表的系列。那有意义吗?不确定我是否在这里很好地解释了自己,或者我的方法是否很好——在 VBA 和编程方面相当菜鸟。
-
您注释掉的
If语句试图将Objects 与=进行比较,这将失败。它应该是If myChart Is Sheets("Sheet1").ChartObjects("Chart 4") Then(比较对象)或只是If myChart.Name = "Chart 4" Then(比较变量)