我正在从VB宏生成Excel柱形图。我添加了3条水平参考线,发现当宏完成时,只显示第一条(与柱形图一起)。但是,如果我保存工作簿并重新打开它,则所有3条参考线都可见。或者,如果我转到设计选项卡“选择数据”并只需单击任何一个参考线名称,则会立即显示所有3个参考线名称。关于我可以放入宏中的什么想法,以便在宏完成时自动显示它们?
创建这3条参考线的代码是(sc
是图表的SeriesCollection
):
With sc.NewSeries
.ChartType = xlXYScatterLinesNoMarkers
.Name = "A"
.XValues = "={1,3}"
.Values = "={100,100}"
End With
With sc.NewSeries
.ChartType = xlXYScatterLinesNoMarkers
.Name = "B"
.XValues = "={1, 3}"
.Values = "={80, 80}"
End With
With sc.NewSeries
.ChartType = xlXYScatterLinesNoMarkers
.Name = "C"
.XValues = "={1, 3}"
.Values = "={50, 50}"
End With
编辑:这是使用@ axel-richter答案中的数据的屏幕截图。这是宏结束后立即看起来的样子。
答案 0 :(得分:0)
我想这是Excel 2010及更高版本。
添加新系列后,请在不带参数的情况下调用Chart.ChartWizard Method。
示例:
假设我们有:
然后运行这个宏:
Sub addChart()
Dim oChart As ChartObject
Dim sc As SeriesCollection
Set oChart = ActiveSheet.ChartObjects.Add(300, 40, 300, 200)
oChart.Chart.ChartWizard Source:=ActiveSheet.Range("A1:D4"), Gallery:=xlColumn
Set sc = oChart.Chart.SeriesCollection
With sc.NewSeries
.ChartType = xlXYScatterLinesNoMarkers
.Name = "A"
.XValues = "={1,3}"
.Values = "={100,100}"
End With
With sc.NewSeries
.ChartType = xlXYScatterLinesNoMarkers
.Name = "B"
.XValues = "={1, 3}"
.Values = "={80, 80}"
End With
With sc.NewSeries
.ChartType = xlXYScatterLinesNoMarkers
.Name = "C"
.XValues = "={1, 3}"
.Values = "={50, 50}"
End With
oChart.Chart.ChartWizard
End Sub
我们有:
答案 1 :(得分:0)
我仍然没有解释为什么这些线不会出现给我,但我找到了一个"解决方案"这会强迫他们进入知名度。我在宏的末尾添加了以下内容:(a)在末尾添加一个额外的系列,并(b)立即删除它。
With sc.NewSeries
.ChartType = xlXYScatterLinesNoMarkers
.Name = "D"
.XValues = "={1, 3}"
.Values = "={50, 50}"
End With
sc(sc.Count).Select
Application.SendKeys "{Delete}"
注意最后一行。使用Selection.Delete
删除额外的系列,但不可见的行保持不变。
答案 2 :(得分:0)
如果您有时间,请尝试不重复使用您的SeriesCollection对象。
我用C#app遇到了这个问题。我在代码中可以看到的唯一相似之处是我们都在同一个SeriesCollection对象上调用NewSeries()。
还值得注意的是Chartwizard,快速系列创建删除解决方法对我来说并不适用。
在每个SeriesCollection.NewSeries()调用之前,工作在图表对象上调用了seriescollection()。
如:
ChartObject co = target.ChartObjects().Item(1);
Chart c = co.Chart;
SeriesCollection s = c.SeriesCollection();
Series s1 = s.NewSeries();
s1.ChartType = XlChartType.xlLine;
s = c.SeriesCollection();
Series s2 = s.NewSeries();
s2.ChartType = XlChartType.xlLine;
总猜想,但我怀疑SeriesCollection类有缺陷;可能某些事件不会在后续的NewSeries调用中触发。根据我们每个人使用的变通方法,导致事件不会触发,因此我们会看到隐形序列'实际上出现了。