use*_*231 6 excel charts vba points
我有一些图表,其中X值是文本,Y值是数字.如果条形图的Y值小于零,我想为每个条形颜色着色,如果大于或等于零,则为绿色.此外,如果条形的X值是"NET CHANGE",我需要条形为黄色.我按照之前的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
Run Code Online (Sandbox Code Playgroud)
错误出现在IF语句中.我也试过.Points(pointIterator).Value,它给我一个"没有为这个对象定义的属性或方法"错误.
对我做错了什么的想法?
在此先感谢您的帮助.
您在使用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
Run Code Online (Sandbox Code Playgroud)