VBA按钮,用于向图形上的序列添加数据点?

VBA按钮,用于向图形上的序列添加数据点?,vba,excel,Vba,Excel,在我的报告中,我有一个每月更新的图表。它只有一个系列的数据,每个月都会在这个系列中增加一个新的点。这是将报告汇总在一起的较大代码的一小部分。我事先为它的波涛汹涌感到抱歉。“XXX”是一个占位符列,因此我可以引用动态位置。我通常将从“XXX”到工作表周围的各个位置进行.Offset 此部分将下一个日期自动填充到占位符左侧的列中。它是我的图形的X坐标 Dim Dates As Range Dim StartDate As Range Dim EmptyDateCell As Range Dim La

在我的报告中,我有一个每月更新的图表。它只有一个系列的数据,每个月都会在这个系列中增加一个新的点。这是将报告汇总在一起的较大代码的一小部分。我事先为它的波涛汹涌感到抱歉。“XXX”是一个占位符列,因此我可以引用动态位置。我通常将从“XXX”到工作表周围的各个位置进行
.Offset

此部分将下一个日期自动填充到占位符左侧的列中。它是我的图形的X坐标

Dim Dates As Range
Dim StartDate As Range
Dim EmptyDateCell As Range
Dim LastDateCell As Range
Dim AllDateCells As Range

    Set StartDate = ws.Rows("3").Cells.Find("XXX").Offset(0, -3)
    Set LastDateCell = ws.Rows("3").Cells.Find("XXX").Offset(0, -2)
    Set EmptyDateCell = ws.Rows("3").Cells.Find("XXX").Offset(0, -1)
    Set Dates = ws.Range(StartDate.Address & ":" & LastDateCell.Address)
    Set AllDateCells = ws.Range(Dates.Address & ":" & EmptyDateCell.Address)

Dates.AutoFill Destination:=AllDateCells
这是我的Y坐标范围。它还通过
Autofill
每月添加到

Dim Averages As Range
Dim StartAverage As Range
Dim EmptyAverageCell As Range
Dim LastAverageCell As Range
Dim AllAverageCells As Range

    Set StartAverage = ws.Rows("171").Cells.Find("XXX").Offset(0, -3)
    Set LastAverageCell = ws.Rows("171").Cells.Find("XXX").Offset(0, -2)
    Set EmptyAverageCell = ws.Rows("171").Cells.Find("XXX").Offset(0, -1)
    Set Averages = ws.Range(StartAverage.Address & ":" & LastAverageCell.Address)
    Set AllAverageCells = ws.Range(Averages.Address & ":" & EmptyAverageCell.Address)

Averages.AutoFill Destination:=AllAverageCells
这是我的X和Y坐标的动态位置。它设置一个从单元格到动态单元格的
范围
,该动态单元格是从占位符开始的
偏移量

Dim rng171 As Range
Dim rng188 As Range
Dim xoffset As Range

    Set xoffset = ws.Rows("171").Cells.Find("XXX").Offset(-17, 0)
    Set rng171 = ws.Range("D171")
    Set rng188 = ws.Range("D188")
这是代码中失败的部分。我正在尝试将x和y坐标添加到已经制作的图表中,并放在工作表中

Charts("Cpk Average").SeriesCollection("Cpk").Values = ws.Range(rng171.Address & ":" & EmptyAverageCell.Address)
Charts("Cpk Average").SeriesCollection("Cpk").XValues = ws.Range(rng188.Address & ":" & xoffset.Address)
它表示
脚本超出范围
。有没有关于如何解决这个问题的想法

任何问题都让我知道

下面是我的项目的一个例子。这不是我上面的代码的目的。这只是为了帮助可视化过程。在将数据添加到图形之前,此示例将位于代码中的确切位置。看一看关于这个例子的评论


谢谢

好的,我知道了。最后两行代码如下

ws.ChartObjects("chart 10").Chart.SeriesCollection("series1").Values = ws.Range(rng171.Address & ":" & EmptyAverageCell.Address)

ws.ChartObjects("chart 10").Chart.SeriesCollection("series1").XValues = ws.Range(rng188.Address & ":" & xoffset.Address)

代码需要有
.ChartObjects
,因为图表在一个工作表中,没有自己的工作表。我的系列和图表名称都错了,而且我缺少了
.chart
,如果我理解正确的话,它是一个属性,而不是一个对象。谢谢你给我指引了正确的方向

哪一行给出了错误?
Charts(“Cpk Average”).SeriesCollection(“Cpk”).Values=ws.Range(rng171.Address&“:”&EmptyAverageCell.Address)
表示
“Cpk Average”
不是命名图表,或者如果是,则
“Cpk”
不是该图表中的命名系列。试着在即时窗口中评估这些部分,看看哪个部分会引起错误。我应该如何准确地评估它们?我不知道你的意思。在VBE中,从“视图”菜单中,确保已启用“立即”窗格。然后,做:
?图表(“Cpk平均值”)。命名
,看看这是否会引发错误?如果没有,那么做
?图表(“Cpk平均值”).SeriesCollection(“Cpk”).Name
,看看会发生什么。如果两者都有效,则应打印出相应的
.Name
属性。