使用excel宏/vba打开/关闭图表系列的可见性

sqyvllje  于 2023-05-30  发布在  其他
关注(0)|答案(4)|浏览(245)

我正在Excel中制作一个折线图(图表),其中几个数据系列被绘制到同一图表上。
我需要创建一个宏/VBA的解决方案,可以打开/关闭这些系列的visibilty通过按下一个按钮(或勾选框等)
类似于这张图片(通过Excel菜单系统手动完成)

我试着查看了所有成员变量/方法
https://msdn.microsoft.com/EN-US/library/office/ff837379.aspx
但运气不太好
我试过用一些类似于

Charts("Chart1").SeriesCollection(1)

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

但是我既不能得到图表对象(我得到一个下标超出范围的错误),也不能找到任何方法,可以让我打开/关闭个别系列的可见性。
有什么想法?

neskvpey

neskvpey1#

每当我不知道如何做这样的事情,我打开宏记录器。
我有一个有四个系列的图表,我使用Excel 2013中的过滤器功能来隐藏和显示第二个系列,而宏记录器正在运行。
下面是相关代码:

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

序列类型(行或列)无关紧要,这适用于任何类型。

lpwwtiir

lpwwtiir2#

我相信你正在寻找的属性是SeriesCollection.Format.Line.Visible属性。我很快创建了一个Excel工作簿,并添加了一个简单的数据集(只是1-10),并添加了一个线图“图表2”到工作表Sheet 1。
以下代码关闭了该行的可见性:

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。要查看图表的名称,请选择它并查看名称框(靠近输入单元格值/公式的位置)。

更新

使用上述方法时,系列名称仍保留在图例框中。我在图例中找不到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设置回您的系列名称。

pdtvr36n

pdtvr36n3#

有一个简单的方法来打开和关闭系列的可见性:在源数据上使用筛选器。它可以帮助你很容易如下。可以插入新窗口。将其中一个窗口设置为源数据表,另一个窗口设置为图表表。然后将两个窗口排列成同时看到两者。现在,如果您同时在源数据表上筛选您喜欢的系列,您将在另一个表上看到您想要的系列。

ee7vknir

ee7vknir4#

打开/关闭系列可见性的答案已经给出了,但是,如果您想对类别(下面的绿色方框)实现相同的功能

解决方案类似但略有不同:
Sheets("Sheet1").ChartObjects("Chart1").Chart.ChartGroups(1).FullCategoryCollection(2).IsFiltered = True
因此,此代码将隐藏第二个类别(例如堆叠条形图中的第二条)。

相关问题