Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Vba 图表系列行:带到前面,发送到后面_Vba_Excel_Charts_Excel Charts - Fatal编程技术网

Vba 图表系列行:带到前面,发送到后面

Vba 图表系列行:带到前面,发送到后面,vba,excel,charts,excel-charts,Vba,Excel,Charts,Excel Charts,如果我在Excel中使用VBA制作一个包含多个系列的折线图,并且其中两个系列的数据非常相似,因此它们的图表系列线部分重叠,那么最后一个写的是前面写的 在工作表\u Change事件中,我希望能够根据更改数据的用户操作,在前面的图表系列行之间来回切换。我可以在不删除和重新创建图表的情况下执行此操作吗 下面是我如何识别系列行的,例如,下面是系列2: Sheet1.ChartObjects("MyChart").Chart.SeriesCollection(2) 获取返回序列的TypeName。我在

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

工作表\u Change
事件中,我希望能够根据更改数据的用户操作,在前面的图表系列行之间来回切换。我可以在不删除和重新创建图表的情况下执行此操作吗

下面是我如何识别系列行的,例如,下面是系列2:

Sheet1.ChartObjects("MyChart").Chart.SeriesCollection(2)
获取返回序列的
TypeName
。我在帮助中看到了
系列
,但没有关于其属性和方法的信息。我在对象浏览器中看不到
系列
(我使用的是Excel 2007)。我能够在上下文帮助下拉列表中获得属性和方法的列表,但是在下拉列表中我没有看到任何有希望的东西

因此,我可以在不删除和重新创建图表的情况下,将图表系列带到前面/发送到后面吗?

您可以做的是将所有系列线条颜色更改为浅色,只有一种除外。你把那件涂成深或亮的(红色)。然后,您可以重复该过程(将宏指定给图表上/附近的按钮),依次高亮显示每个系列

    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

下面是一种简单的非VBA方法,用于突出显示图表中的一个系列

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

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

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

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


请尝试
Sheet1.ChartObjects(“MyChart”).Chart.SeriesCollection(2).PlotOrder=1
@chancea:谢谢,但是更改PlotOrder属性不会影响哪一行在另一行的前面/后面。嗯,对我来说是这样的,@chancea解决方案也适用于我。我使用Excel 2013。在我看来,Excel 2007有一些无法解释的错误。您可以尝试
选择
ing系列,然后执行
Selection.PlotOrder=1
。99.9%的情况下,我建议不要这样做,但我在使用图表/系列时看到了一些奇怪的情况&它们的格式似乎只有在您首先选择对象时才起作用。值得一试,正如他们所说:没有冒险,就没有收获。