数据点标记(散点图或线条)Excel VBA的填充和边框颜色属性

时间:2014-03-03 06:14:40

标签: excel vba colors charts marker

我正在编写一些代码来遍历图表中的每个数据点,如果颜色错误,则更改点标记的颜色(填充/边框)。如果它是兼容的颜色(使用选择的情况),我不希望它改变。

问题:无论颜色是什么,检查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新用户,如果没有提出问题就道歉。

1 个答案:

答案 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