为什么我的Excel图表中暂时缺少某些系列?

时间:2016-11-18 15:42:48

标签: excel vba excel-vba charts macros

我正在从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答案中的数据的屏幕截图。这是宏结束后立即看起来的样子。

Screenshot

3 个答案:

答案 0 :(得分:0)

我想这是Excel 2010及更高版本。

添加新系列后,请在不带参数的情况下调用Chart.ChartWizard Method

示例:

假设我们有:

enter image description here

然后运行这个宏:

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

我们有:

enter image description here

答案 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调用中触发。根据我们每个人使用的变通方法,导致事件不会触发,因此我们会看到隐形序列'实际上出现了。