我想在3D条形图中绘制一系列现金流量。 我将图表的数据源设置为包含从0日元到7日元现金流量的单元格范围。
但是,我想根据现金流量是否为负来更改条形的颜色。
我当时正在考虑使用For Each循环和If / Else来做到这一点,但是我不知道如何引用每个柱的值。请帮忙。
我有现金流量,例如-1000、100、500、650、300、400、200 并且我有以下代码:
Dim j As Integer
Dim cell As Range
Dim flows As Range
Set flows = Worksheets("Data Input").Range("B2:B8")
For Each cell In flows
For j = 1 To 7
If cell.Value < 0 Then
Worksheets("Output").ChartObjects("Chart 1").Activate
ActiveChart.FullSeriesCollection(1).Select
ActiveChart.FullSeriesCollection(1).Points(j).Select
With Selection.Format.Fill
.ForeColor.RGB = RGB(255, 0, 0)
End With
ElseIf cell.Value > 0 Then
Worksheets("Output").ChartObjects("Chart 1").Activate
ActiveChart.FullSeriesCollection(1).Select
ActiveChart.FullSeriesCollection(1).Points(j).Select
With Selection.Format.Fill
.ForeColor.RGB = RGB(0, 255, 0)
End With
End If
Next j
Next cell
应该发生的情况是,第一个条变为红色,因为现金流为负,其余的条应变为绿色。 代码可以运行,但条形仍默认为蓝色...
答案 0 :(得分:0)
在“开发人员”选项卡中,只需“记录宏”并创建所需的条形图。格式化后,按“停止录制”,然后检查代码。这是最简单的开始方法。
让我们假设您记录了该宏。在录制过程中,寻找将红色条之一上的<0值着色为红色的点。
ActiveChart.FullSeriesCollection(1).Points(3).Select
With Selection.Format.Fill
.Visible = msoTrue
.ForeColor.RGB = RGB(255, 0 0)
.Transparency = 0
.Solid
End With
该代码选择一个称为点的东西。因此,我们希望了解这意味着什么。
Visual Basic编辑器[F11]中的对象浏览器[F2]了解有关对象的其他详细信息。
在对象浏览器中查看时,它说点是对象的集合,并且是 Excel.Series 的成员(现在成为关注点)。浏览Series对象的其他成员,我们对 Values 进行了罚款...将这些知识放在一起:
Dim ws As Excel.Worksheet
Dim chart As Excel.chart
Dim series As Excel.series
Dim i As Integer
Set ws = ThisWorkbook.Worksheets("Output")
Set chart = ws.ChartObjects("Chart 1").chart
Set series = chart.FullSeriesCollection(1)
For i = 1 To series.Points.Count
If (series.Values(i) < 0) Then
chart.FullSeriesCollection(1).Points(i).Format.Fill.ForeColor.RGB = RGB(255, 0, 0)
End If
Next i