使用 excel Macros/vba 调整图表系列 on/off 的可见性

Turning the visibility of chart series on/off using excel Macros/vba

我正在 Excel 中制作折线图(图表),将多个数据系列绘制到同一张图表上。

我需要创建一个 macro/VBA 解决方案,可以通过按下按钮(或勾选框等)on/off 来改变这些系列的可见性

类似于此图(通过excel菜单系统手动完成)

我已经尝试在

上查看所有成员vars/methods

https://msdn.microsoft.com/EN-US/library/office/ff837379.aspx

但运气不佳。

我试过像

这样的位
Charts("Chart1").SeriesCollection(1)

Worksheets("Graphical Data").ChartObjects(1)

但我既无法获取图表对象(出现下标超出范围的错误),也无法找到任何可以让我 on/off 改变单个系列可见性的方法。

有什么想法吗?

我相信您正在寻找的 属性 是 SeriesCollection.Format.Line.Visible 属性。我快速创建了一个 Excel 工作簿并添加了一个简单的数据集(仅 1-10)并向 sheet Sheet1 添加了折线图 "Chart 2"。

此代码关闭了行的可见性:

Option Explicit

Private Sub Test()
    Dim cht As Chart
    Dim ser As Series

    'Retrieve our chart and seriescollection objects'
    Set cht = Worksheets("Sheet1").ChartObjects("Chart 2").Chart
    Set ser = cht.SeriesCollection(1)

    'Set the first series line to be hidden'
    With ser.Format.Line
        .Visible = msoFalse
    End With

End Sub

同样,将 ser.Format.Line.Visible 属性 设置为 msoTrue 使该行再次可见。

至于检索图表本身,我必须先激活它,然后将我的 cht 变量设置为 ActiveChart。要查看图表的名称,select 并查看名称框(在您输入单元格值/公式的位置附近)。

更新

使用上述方法时,系列名称仍保留在图例框中。我找不到图例中 SeriesCollection 的可见性 属性,但是一种解决方法是简单地将系列重命名为空字符串(这将使系列从图例中消失)和然后在您要显示时重命名该系列。

下面的这段代码将切换图例中线条和系列名称的可见性。

Option Explicit

Private Sub Test()
    Dim cht As Chart
    Dim ser As Series

    'Retrieve our chart and seriescollection objects'
    Set cht = Worksheets("Sheet1").ChartObjects("Chart 1").Chart
    Set ser = cht.SeriesCollection(1)

    'Set the first series line to be hidden'

    With ser.Format.Line
        If .Visible = msoTrue Then
            .Visible = msoFalse
            ser.Name = vbNullString
        Else
            .Visible = msoTrue
            ser.Name = "Series 1"
        End If
    End With

End Sub

而且,每当您使用 .Format.Line.Visible = msoTrue 时,请记住将 ser.Name 设置回您系列的任何名称。

每当我不知道如何做这样的事情时,我都会打开宏录制器。

我有一个图表有四个系列,我在 Excel 2013 年使用过滤器功能隐藏和显示第二个系列,而宏记录器是 运行。

相关代码如下:

ActiveChart.FullSeriesCollection(2).IsFiltered = True
' series 2 is now hidden
ActiveChart.FullSeriesCollection(2).IsFiltered = False
' series 2 is now visible

系列类型(行或列)无关紧要,这适用于其中任何一个。

有一种简单的方法可以打开和关闭系列的可见性:对源数据使用过滤器。 愿它能轻松帮助您,如下所示。 您可以插入一个新的 Window。将其中一个设为源数据 sheet,将另一个 window 设为图表 sheet。然后安排两个windows同时看。现在,如果您同时在源数据 sheet 上过滤您喜欢的系列,您将在另一个 sheet.

上看到您想要的系列