4

如果我在 Excel 中使用 VBA 制作具有多个系列的折线图,并且两个系列的数据非常相似,以至于它们的图表系列线部分重叠,最后写的在前面写的。

在这种情况Worksheet_Change下,我希望能够根据更改数据的用户操作在前面的图表系列线之间来回切换。我可以在不删除和重新创建图表的情况下这样做吗?

这是我识别系列线的方式,例如这里的系列 2:

Sheet1.ChartObjects("MyChart").Chart.SeriesCollection(2)

得到TypeName回报Series。我Series在帮助中看到,但没有关于其属性和方法的信息。我Series在对象浏览器中看不到(我在 Excel 2007 上)。我能够在上下文帮助下拉列表中获得属性和方法列表,但我没有在下拉列表中看到任何有希望的内容。

那么,我可以将图表系列放在前面/将其发送到后面,而不删除和重新创建图表吗?

4

2 回答 2

1

这是一种在图表中突出显示一个系列的简单非 VBA 方法。

下面我在 B 列中显示 X 数据,在 C:E 列中显示系列 alpha、beta 和 gamma 的 Y 数据,在 F 列中显示额外数据。

我有一个图表,在图表下方使用开发人员选项卡 > 插入 > 表单控件 > 组合框插入了一个组合框。我格式化控件(右键单击)并将输入范围设置为 K16:18,将单元格链接设置为 J16。

我选择了 F2:F16,其中 F2 是活动单元格。我=INDEX(C2:E2,$J$16)在编辑栏中输入,然后在按下 Enter 键的同时按住 Ctrl 键。这将公式填充到整个范围内。本质上,该公式根据组合框的“单元格链接”从左侧三个单元格中获取值。由于我在组合中选择了“beta”,因此 J16 包含值 2,F 列显示第二个数据列的值。

该图表是使用整个数据范围制作的。前三个系列用浅灰色线条格式化,第四个(重复)系列用比较突出的颜色格式化。所有数据一次可见,但只有一个突出显示。

在此处输入图像描述

于 2018-09-12T01:53:17.867 回答
0

在此处输入图像描述您可以做的是将所有系列线颜色更改为浅色,除了一种。那个你颜色深或亮,即红色。然后您可以重复该过程(将宏分配给图表上/附近的按钮)以依次突出显示每个系列。

    Sub CycleSeriesColors()
    Dim seriesCount As Integer, i As Integer, smod
    Static s    '"Remember" what series we are on between calls.
    ActiveSheet.ChartObjects("Chart 1").Activate
    '    ActiveChart.PlotArea.Select
    seriesCount = ActiveChart.SeriesCollection.Count
    s = s + 1
    smod = s Mod (seriesCount + 1)

    '    ActiveChart.ChartArea.Select
    If Not smod = 0 Then
        With ActiveChart.SeriesCollection(smod).Format.Line
            .Visible = msoTrue
            .Visible = msoTrue
            .ForeColor.RGB = RGB(192, 0, 0)
            .Transparency = 0
        End With
        For i = 1 To seriesCount
            If Not i = smod Then   'the series is to backgrounded
                With ActiveChart.SeriesCollection(i).Format.Line
                    .Visible = msoTrue
                    .Visible = msoTrue
                    .ForeColor.RGB = RGB(240, 240, 240)
                    .Transparency = 0.85
                End With
            End If
        Next i
    Else
    Randomize
       For i = 1 To seriesCount
            With ActiveChart.SeriesCollection(i).Format.Line
                .Visible = msoTrue
                .Visible = msoTrue
                .ForeColor.RGB = RGB(((i * i) ^ 0.6 * 3), ((i * i) ^ 0.6 * 8), ((i * i) ^ 0.6 * 12))
                .Transparency = 0
            End With
        Next i
    End If
    End Sub
于 2018-09-04T00:25:45.327 回答