我正在编写一些代码来遍历图表中的每个数据点,如果颜色错误,则更改点标记的颜色(填充/边框)。如果它是兼容的颜色(使用选择的情况),我不希望它改变。
问题:无论颜色是什么,检查markerbackgroundcolor和markerforegroundcolor都会返回“-1”,直到我手动更改颜色(右键单击标记并将填充从自动更改为实体)。与自动颜色有关。
即时窗口中的基本示例(在插入的散点图之后,不更改格式):
?Activechart.SeriesCollection(1).points(1).markerbackgroundcolor
returns
-1
然后不做任何其他事情:
Activechart.SeriesCollection(2).points(1).markerbackgroundcolor=255
?Activechart.SeriesCollection(2).points(1).markerbackgroundcolor
255
我可以测试标记的另一个属性吗?或完全是另一种方法?检查颜色本身对于代码的其他部分至关重要,所以到目前为止我尝试过的所有工作都没有削减它:(
PS新用户,如果没有提出问题就道歉。答案 0 :(得分:1)
我认为你不能改变个别数据点(或者,至少我不知道如何)。我认为问题在于检查“合规颜色”。这种类型的颜色属性似乎需要一个对应于颜色的Long值。
此代码对我(Excel 2007)在我为项目创建的图表中的折线图上工作(我添加了Debug.Print
行以显示我的图表中为Series返回的数字)...
Sub formatTable()
Dim wb As Workbook
Dim ws As Worksheet
Dim co As ChartObject
Dim c As Integer
Set wb = ActiveWorkbook
Set ws = wb.Sheets("Sheet1")
Set co = ws.ChartObjects("Chart1")
With co.Chart
Debug.Print .Name
For c = 1 To .SeriesCollection.Count
Debug.Print .SeriesCollection(c).Name
Debug.Print "Foreground Color: " & .SeriesCollection(c).MarkerForegroundColorIndex 'Get Forground Color
Debug.Print "Background Color: " & .SeriesCollection(c).MarkerBackgroundColorIndex ' Get Background color
.SeriesCollection(c).MarkerForegroundColorIndex = 5 'Set foreground to Blue
.SeriesCollection(c).MarkerBackgroundColorIndex = 42 ' Set background to Lt Blue
Next c
End With
End Sub
重新阅读你的问题之后,我深入挖掘了一下,看看如何检查或设置Point
的颜色。您需要做的就是在上面的代码中嵌入另一个FOR
循环。这一行中最重要的是使用:.SeriesCollection(c).Points.Item(i).Marker... = Value