我有一些代碼,我已經使用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':屬性讓過程未定義,並且屬性獲取過程未返回對象 –