图表系列线:带到前面,发送回来

时间:2015-02-13 19:00:06

标签: excel vba excel-vba charts excel-charts

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

Worksheet_Change事件中,我希望能够根据更改数据的用户操作在前面的图表系列行之间来回切换。如果不删除并重新创建图表,我可以这样做吗?

以下是我如何识别系列行,例如这里的系列2:

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

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

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

2 个答案:

答案 0 :(得分: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显示第二个数据列的值。

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

enter image description here

答案 1 :(得分:0)

enter image description here您可以做的是将所有系列线条的颜色更改为浅色,除了一种。那个颜色是深色或明亮,即红色。然后,您可以重复此过程(将宏分配给图表上/附近的按钮)以依次突出显示每个系列。

    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