【问题标题】:Chart Series Line: Bring to Front, Send to Back图表系列线:放在前面,放在后面
【发布时间】:2015-02-13 19:00:05
【问题描述】:

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

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

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

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

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

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

【问题讨论】:

  • 试试Sheet1.ChartObjects("MyChart").Chart.SeriesCollection(2).PlotOrder = 1
  • @chancea :谢谢,但更改 PlotOrder 属性不会影响哪个系列行在另一个前面/后面。
  • 嗯,对我有用,look here
  • @chancea 解决方案也适用于我。我使用 Excel 2013。从我的角度来看,Excel 2007 有一些无法解释的错误。
  • 你可以试试Select这个系列,然后Selection.PlotOrder = 1。 99.9% 的情况下,我建议不要这样做,但我在使用图表/系列及其格式时看到了一些时髦的情况,这些情况似乎只有在您首先选择对象时才有效。值得一试,正如他们所说:没有冒险,没有收获。

标签: vba excel charts excel-charts


【解决方案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 列显示第二个数据列的值。

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

【讨论】:

    【解决方案2】:

    你可以做的就是把所有系列线的颜色都改成浅色,除了一个。那个你颜色深或亮,即红色。然后您可以重复该过程(将宏分配给图表上/附近的按钮)以依次突出显示每个系列。

        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
    
    猜你喜欢
    • 1970-01-01
    • 2020-09-25
    • 1970-01-01
    • 2011-03-28
    • 1970-01-01
    • 2018-07-27
    • 2018-05-23
    • 2019-07-20
    • 1970-01-01
    相关资源
    最近更新 更多