1st:.XValues / .Values的选择只有在我对单元格进行硬编码时才会起作用(我不想这样做),而不是我的方式。
第二:每次第二次运行代码时,我添加图表时已经有了一些系列,所以我最终得到了比我想要的更多的系列。
Sub AddChart()
Dim ch As Chart
Dim ws As Worksheet
Set ws = Sheets("Data")
Set ch = CHARTS.Add2
With ch.SeriesCollection.NewSeries
.Name = ws.Range("B1")
.XValues = ws.Range("B18", Range("B18").End(xlDown))
.Values = ws.Range("C18", Range("C18").End(xlDown))
End With
End Sub
答案 0 :(得分:0)
考虑一些事情:
我建议您将图表创建与图表更新分开
所以在下面我们有一个创建图表子来创建图表:
Option Explicit
Sub CreateChart()
Dim ch As Chart
Dim ws As Worksheet
Dim wb As Workbook
Set wb = ThisWorkbook
Set ws = wb.Worksheets("Data")
Set ch = Charts.Add2
With ch.SeriesCollection.NewSeries
.Name = ws.Range("B1")
.XValues = ws.Range("Xseries")
.Values = ws.Range("Yseries")
End With
End Sub
然后我们有一个更新图表功能,可以使用现有的图表工作表。现在,根据您想要更新XValues和Values的方式,您可以简单地将范围变量作为新分配传递,例如。
ch.SeriesCollection(1).XValues = myRangeVariable
在我给出的情况下,您可以使用2个动态命名范围。这意味着无论何时运行update sub,源列中的任何新行都将被选中并添加到图表中。
动态系列被添加到名称管理器, Ctrl + F3 并且有一个用于X系列,一个用于Y:
XSERIES
=OFFSET(Data!$B$18,0,0,COUNT(Data!$B$18:$B$1048576),1)
Y系列
=OFFSET(Data!$C$18,0,0,COUNT(Data!$C$18:$C$1048576),1)
名称管理器中的动态系列
更新图表的代码(可以与按钮关联)
Sub UpdateChart()
Dim ch As Chart
Dim wb As Workbook
Dim ws As Worksheet
Set wb = ThisWorkbook
Set ws = wb.Worksheets("Data")
Set ch = wb.Charts("Chart1") 'change as appropriate
ch.SeriesCollection(1).XValues = ws.Range("Xseries")
ch.SeriesCollection(1).Values = ws.Range("Yseries")
End Sub
现在,如果你只是担心有一个图表可以获取新添加的数据行,你可以跳过VBA并直接使用动态系列直接与图表
您可以编辑现有的图表系列和Y值放置
=Book1!Yseries
对于X值放置
=Book1!Xseries
Book1
将替换为您的工作簿名称。