基于点值Excel VBA中改变条形图颜色数据点(excel vba changing bar ch

2019-08-04 00:27发布


我有一些图表,其中X值是文本和Y值的数值。 我要的颜色各条红色如果酒吧的Y值小于零,如果绿大于或等于零。 另外,如果栏的X值是“净变化”,我需要的栏为黄色。 我跟着前面的StackOverflow线程的方向在这里: 更改使用VBA基于类别标签栏的颜色 。

我收到运行时错误451属性让未定义的过程和属性的get过程没有返回的对象。

我的代码如下:

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的,这让我一个“属性或方法不适合这个对象定义的”错误。

在我做错了什么有什么想法?

在此先感谢您的帮助。

Answer 1:

你碰到麻烦您使用的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


Answer 2:

这里是不需要VBA的替代形式,动态工作原理公式更新。 退房“条件格式化条形图”例如,在本教程中:

在Excel图表条件格式



文章来源: excel vba changing bar chart color for a data point based on point value