我有一些代码,我已经使用excel图表颜色已经有好几年了,它运行良好,(尽管有可能有更好的方法来实现)。这些图表包含2个系列,第一个系列具有价值,第二个系列具有目标。目标没有着色,但vba根据vba中硬编码的目标循环遍历第一个系列和颜色。Excel VBA,基于系列值比较选择图表颜色
我现在面临的问题是我添加了一个图表,其目标可以逐月更改,因此硬编码不起作用。我如何使用相同的理论,但直接比较系列1数据与系列2数据以确定颜色(案例是系列1点>系列2点等)。我尝试了很多方法,但没有成功,所以我们将不胜感激。以下是成熟技术的代码。
Private Sub Worksheet_Activate()
Dim cht As Object
Dim p As Object
Dim V As Variant
Dim Counter As Integer
For Each cht In ActiveSheet.ChartObjects
Counter = 0
V = cht.Chart.SeriesCollection(1).Values
For Each p In cht.Chart.SeriesCollection(1).Points
Counter = Counter + 1
Select Case V(Counter)
'Case Is = 1
'p.Shadow = False
'p.InvertIfNegative = False
'p.Fill.OneColorGradient Style:=msoGradientVertical, Variant:=3, _
' Degree:=0.78
'p.Fill.Visible = True
'p.Fill.ForeColor.SchemeColor = 5
Case Is < 0.98
p.Shadow = False
p.InvertIfNegative = False
p.Fill.OneColorGradient Style:=msoGradientVertical, Variant:=3, _
Degree:=0.78
p.Fill.Visible = True
p.Fill.ForeColor.SchemeColor = 3
'Case Is < 0.98
'p.Shadow = False
'p.InvertIfNegative = False
'p.Fill.OneColorGradient Style:=msoGradientVertical, Variant:=4, _
' Degree:=0.38
'p.Fill.Visible = True
'p.Fill.ForeColor.SchemeColor = 6
Case Is <= 1
p.Shadow = False
p.InvertIfNegative = False
p.Fill.OneColorGradient Style:=msoGradientVertical, Variant:=3, _
Degree:=0.78
p.Fill.Visible = True
p.Fill.ForeColor.SchemeColor = 10
End Select
Next
Next
End Sub
David,感谢您的快速响应。我做了调整并理解了这个想法,但我仍然遇到运行时错误。试试我为系列2值创建了一个变量,并给出了一个镜头,但我得到了同样的错误。 –
请参阅修订版本:'Case Is> .SeriesCollection(2).Values()(Counter)' –
运行时错误'451':属性让过程未定义,并且属性获取过程未返回对象 –