使用 VBA 从图表中删除系列
Remove series from chart with VBA
我正在通过 vba 代码在 excel 中创建图表。我正在使用连续数据并且图表弹出没有问题,但是有一个名为 "Series 3" 的额外系列我没有要求并且需要摆脱(首先通过删除它或省略)。它里面没有数据,但至少需要从图例中删除。这是我的代码:
Dim MyChtObj As ChartObject
Dim Sht1 As Worksheet
Dim ShtName As String
Set Sht1 = Worksheets("Parameter Forecasts")
ShtName = Sht1.Name
Set MyChtObj = Sht1.ChartObjects.Add(100, 100, 500, 500)
Set a = Sht1.Range("E37", Sht1.Range("E37").End(xlToRight))
Set b = Sht1.Range("E38", Sht1.Range("E38").End(xlToRight))
Set InputData = Union(a, b)
With MyChtObj.Chart
.ChartType = xlLineMarkers
.SetSourceData InputData
.PlotBy = xlRows
.SeriesCollection.NewSeries.XValues = Sht1.Range("F36", Sht1.Range("F36").End(xlToRight))
End With
我已经试过了:
MyChtObj.SeriesCollection(3).Delete
但这不起作用。
提前致谢,马克斯
SeriesCollection
是 ChartObject.Chart
对象的一部分,而不是 ChartObject
。
因此,替换您的行:
MyChtObj.SeriesCollection(3).Delete
与:
MyChtObj.Chart.SeriesCollection(3).Delete
你的代码行
.SeriesCollection.NewSeries.XValues = Sht1.Range("F36", Sht1.Range("F36").End(xlToRight))
正在通过 .NewSeries
添加第三个系列。改成
.SeriesCollection(1).XValues = Sht1.Range("F36", Sht1.Range("F36").End(xlToRight))
现在没有要删除的内容了。
这似乎并不总是有效
.SeriesCollection(1).XValues = Sht1.Range("F36", Sht1.Range("F36").End(xlToRight))
如果没有要删除的系列 3,这将不起作用(有时默认情况下该系列 3 随机不出现,然后您会收到此行的错误消息)
MyChtObj.Chart.SeriesCollection(3).Delete
这是一个快速又肮脏的把戏。添加这个(在这里重复 3 次,但根据您的 sheet 重复更多次,因为不同的 sheets 取决于填充的单元格的数量,生成不同数量的随机序列)。每次删除都会删除落在 "list" 中第 3 个位置的系列,直到 nr 或系列为 2
If .SeriesCollection.Count > 2 Then
MyChtObj.Chart.SeriesCollection(3).Delete
End If
If .SeriesCollection.Count > 2 Then
MyChtObj.Chart.SeriesCollection(3).Delete
End If
If .SeriesCollection.Count > 2 Then
MyChtObj.Chart.SeriesCollection(3).Delete
End If
我正在通过 vba 代码在 excel 中创建图表。我正在使用连续数据并且图表弹出没有问题,但是有一个名为 "Series 3" 的额外系列我没有要求并且需要摆脱(首先通过删除它或省略)。它里面没有数据,但至少需要从图例中删除。这是我的代码:
Dim MyChtObj As ChartObject
Dim Sht1 As Worksheet
Dim ShtName As String
Set Sht1 = Worksheets("Parameter Forecasts")
ShtName = Sht1.Name
Set MyChtObj = Sht1.ChartObjects.Add(100, 100, 500, 500)
Set a = Sht1.Range("E37", Sht1.Range("E37").End(xlToRight))
Set b = Sht1.Range("E38", Sht1.Range("E38").End(xlToRight))
Set InputData = Union(a, b)
With MyChtObj.Chart
.ChartType = xlLineMarkers
.SetSourceData InputData
.PlotBy = xlRows
.SeriesCollection.NewSeries.XValues = Sht1.Range("F36", Sht1.Range("F36").End(xlToRight))
End With
我已经试过了:
MyChtObj.SeriesCollection(3).Delete
但这不起作用。
提前致谢,马克斯
SeriesCollection
是 ChartObject.Chart
对象的一部分,而不是 ChartObject
。
因此,替换您的行:
MyChtObj.SeriesCollection(3).Delete
与:
MyChtObj.Chart.SeriesCollection(3).Delete
你的代码行
.SeriesCollection.NewSeries.XValues = Sht1.Range("F36", Sht1.Range("F36").End(xlToRight))
正在通过 .NewSeries
添加第三个系列。改成
.SeriesCollection(1).XValues = Sht1.Range("F36", Sht1.Range("F36").End(xlToRight))
现在没有要删除的内容了。
这似乎并不总是有效
.SeriesCollection(1).XValues = Sht1.Range("F36", Sht1.Range("F36").End(xlToRight))
如果没有要删除的系列 3,这将不起作用(有时默认情况下该系列 3 随机不出现,然后您会收到此行的错误消息)
MyChtObj.Chart.SeriesCollection(3).Delete
这是一个快速又肮脏的把戏。添加这个(在这里重复 3 次,但根据您的 sheet 重复更多次,因为不同的 sheets 取决于填充的单元格的数量,生成不同数量的随机序列)。每次删除都会删除落在 "list" 中第 3 个位置的系列,直到 nr 或系列为 2
If .SeriesCollection.Count > 2 Then
MyChtObj.Chart.SeriesCollection(3).Delete
End If
If .SeriesCollection.Count > 2 Then
MyChtObj.Chart.SeriesCollection(3).Delete
End If
If .SeriesCollection.Count > 2 Then
MyChtObj.Chart.SeriesCollection(3).Delete
End If