在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
这也运行良好,该系列在工作表中引用预期的范围。
所以我不知道问题是什么