首页 文章

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

提问于
浏览
3

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

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

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

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

获得 TypeName 就会返回 Series . 我在帮助中看到 Series ,但没有关于其属性和方法的信息 . 我没有在对象浏览器中看到 Series (我在下拉列表中看到了任何有希望的东西 .

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

2 回答

  • 0

    这是一种简单的非VBA方式来突出显示图表中的一个系列 .

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

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

    我选择了F2:F16,其中F2是活动单元格 . 我在公式栏中输入 =INDEX(C2:E2,$J$16) ,然后在按下Enter键时按住Ctrl键 . 这填补了整个范围的公式 . 本质上,公式根据组合框的Cell Link从三个单元格中取值 . 由于我在组合中选择了"beta",因此J16包含值2,而列F显示第二个数据列的值 .

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

    enter image description here

  • 1

    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
    

相关问题