使用 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.
上看到您想要的系列
我正在 Excel 中制作折线图(图表),将多个数据系列绘制到同一张图表上。
我需要创建一个 macro/VBA 解决方案,可以通过按下按钮(或勾选框等)on/off 来改变这些系列的可见性
类似于此图(通过excel菜单系统手动完成)
我已经尝试在
上查看所有成员vars/methodshttps://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.
上看到您想要的系列