【问题标题】:How to conditionally change bar colour in chart (VBA) [closed]如何有条件地更改图表中的条形颜色(VBA)[关闭]
【发布时间】:2018-09-08 15:29:35
【问题描述】:

我想在 3D 条形图上绘制一系列现金流。 我将图表的数据源设置为包含从 Yr 0 到 Yr 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

应该发生的情况是第一个条变为红色,因为现金流为负数,其余的应该变为绿色。 代码运行,但条形图仍为默认蓝色...

【问题讨论】:

标签: arrays excel vba for-loop


【解决方案1】:

在开发人员选项卡中,只需“记录宏”并创建所需的条形图。根据您的喜好格式化后,“停止录制”,然后查看代码。这是最简单的开始方式。

假设您录制了宏。在录制过程中,寻找您将其中一个条染成红色以表示

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

【讨论】:

    猜你喜欢
    • 2012-03-31
    • 2013-12-11
    • 1970-01-01
    • 2011-08-03
    • 2012-01-19
    • 2023-04-06
    • 1970-01-01
    • 2016-05-18
    • 2012-10-18
    相关资源
    最近更新 更多