excel vba根据点值更改数据点的条形图颜色

时间:2012-12-12 22:05:35

标签: excel vba charts points


我有一些图表,其中X值是文本,Y值是数字。如果条形图的Y值小于零,我想为每个条形颜色着色,如果大于或等于零,则为绿色。此外,如果条形的X值是“NET CHANGE”,我需要条形为黄色。我按照之前的StackOverflow线程中的说明进行操作:Changing Bar colors using VBA based on category label

我收到运行时错误451属性let过程未定义且属性获取过程未返回对象。

我的代码如下:

For chartIterator = 1 To ActiveSheet.ChartObjects.count

    For pointIterator = 1 To ActiveWorkbook.Sheets("Sheet1").ChartObjects(chartIterator).Chart.SeriesCollection(1).Points.count
        If ActiveWorkbook.Sheets("Sheet1").ChartObjects(chartIterator).Chart.SeriesCollection(1).Values(pointIterator) >= 0 Then
            ActiveWorkbook.Sheets("Sheet1").ChartObjects(chartIterator).Chart.SeriesCollection(1).Points(pointIterator).Interior.Color = _
                RGB(146, 208, 80)
        Else
            ActiveWorkbook.Sheets("Due To Chart").ChartObjects(chartIterator).Chart.SeriesCollection(1).Points(pointIterator).Interior.Color = _
                RGB(255, 0, 0)
        End If
    Next pointIterator

Next chartIterator

IF语句出现错误。我也试过.Points(pointIterator).Value,它让我得到了一个“没有为这个对象定义的属性或方法”错误。

对我做错了什么的想法?

提前感谢您的帮助。

2 个答案:

答案 0 :(得分:6)

您在使用SeriesCollection(1).Values时遇到了麻烦,您将其视为可以迭代的数组。相反,这是一个返回SeriesCollection中的点值的函数。

需要将函数的结果分配给数组变量,然后迭代数组以测试数组中的值是否大于或小于零。然后,您可以将颜色分配给图表点。

这段代码可以解决问题:

    Sub color_chart()

    Dim chartIterator As Integer, pointIterator As Integer, _
        seriesArray() As Variant

    For chartIterator = 1 To ActiveSheet.ChartObjects.Count
        seriesArray =  ActiveWorkbook.Sheets("Sheet1").ChartObjects(chartIterator). _
                       chart.SeriesCollection(1).Values

        For pointIterator = 1 To UBound(seriesArray)             

           If seriesArray(pointIterator) >= 0 Then
               ActiveWorkbook.Sheets("Sheet1").ChartObjects(chartIterator). _  
               chart.SeriesCollection(1).Points(pointIterator).Interior.Color = _
               RGB(146, 208, 80)
           Else
               ActiveWorkbook.Sheets("Sheet1").ChartObjects(chartIterator). _
               chart.SeriesCollection(1).Points(pointIterator).Interior.Color = _
               RGB(255, 0, 0)
           End If

        Next pointIterator

    Next chartIterator

    End Sub

答案 1 :(得分:3)

这是一个不需要VBA的替代方案,并且在公式更新时动态工作。查看本教程中的“条件格式化条形图”示例:

Conditional Formatting in Excel Charts