在Excel图表上添加一个空的系列

我正在尝试使用VBA将许多系列添加到图表中,如下面的代码所示。

For i = 0 To 9 Set serNew = chtMap.SeriesCollection.NewSeries With serNew .XValues = Range("Y4").Cells(1, 1 + 2 * i).Resize(32000, 1) .Values = Range("Y4").Cells(1, 2 + 2 * i).Resize(32000, 1) End With Next i 

一些系列的范围在其细胞中还没有数据; 用户稍后将写入/加载这个数据。 这个想法是让他们做好准备。

问题 :当循环遇到这样一个空的范围时,出现错误1004:无法设置Series类的XValues属性。 为什么还有解决方法?

奇怪的是,在图表菜单 – > |源数据…手动完成工作非常好。 实际上,如果您手动执行此操作时录制macros,则结果如下所示:

 ActiveChart.SeriesCollection.NewSeries ActiveChart.SeriesCollection(4).XValues = "=Sheet2!R4C31:R32003C31" ActiveChart.SeriesCollection(4).Values = "=Sheet2!R4C32:R32003C32" 

但是当重新播放这个macros时,Excel会给出一个错误!

手动这样做不是一个愉快的前景。 我想我可以粘在单元格中的假数据,创build系列,然后删除假数据。 我真的必须拉这样的诱饵,并开启Excel?

您可以尝试复制范围(两列),并使用特殊粘贴将其添加到图表中:

 TwoColumnRange.Copy chtMap.SeriesCollection.Paste Rowcol:=xlColumns, SeriesLabels:=False, _ CategoryLabels:=True, Replace:=False, NewSeries:=True 

我build议(就像我自己做的那样)在某个地方隐藏一些虚假的数据,并把所有的系列默认指向那里。 也可以使用.LineStyle=xlNone.<arkeStyle=xlNone甚至是ActiveChart.Legend.LegendEntries(i).Delete隐藏这个系列。 然后,当客户填写数据时,运行一个replace系列指向的macros,并设置线条/标记样式,以及ActiveChart.HasLegend = True来重新创build图例条目。 如果事实我不得不closures图例,然后再重新正确地重置的东西。

祝你好运。

我已经决定添加一个表单button,调用可以在input数据添加系列的子工具。 它还会在实际添加每个系列之前检查各个范围是否为空。 这感觉就像是最干净的解决scheme。

老问题,但…

我只写了这段代码,并在Excel 2010和2016中进行了testing。它为现有的XY散点图添加了一个新的系列,新的系列公式链接到.Name,.Values和.XValues的空白范围:

 Sub AddBlankSeries() Dim srs As Series Set srs = ActiveChart.SeriesCollection.NewSeries With srs .Name = "=" & ActiveSheet.Range("E2").Address(, , , True) .Values = ActiveSheet.Range("E3:E8") .XValues = ActiveSheet.Range("D3:D8") End With End Sub 

然后我回到原来的代码:

 Sub AddSeveralBlankSeries() Dim i As Long Dim chtMap As Chart Dim serNew As Series Set chtMap = ActiveSheet.Shapes.AddChart(xlXYScatterLines).Chart For i = 0 To 9 Set serNew = chtMap.SeriesCollection.NewSeries With serNew .XValues = Range("Y4").Cells(1, 1 + 2 * i).Resize(32000, 1) .Values = Range("Y4").Cells(1, 2 + 2 * i).Resize(32000, 1) End With Next i End Sub 

这也运行良好,该系列在工作表中引用预期的范围。

所以我不知道问题是什么