VBA循环使用另一张表中的数据更新图表中的系列

Posted

技术标签:

【中文标题】VBA循环使用另一张表中的数据更新图表中的系列【英文标题】:VBA loop updating series in chart using data from another sheet 【发布时间】:2017-12-17 03:02:57 【问题描述】:

在 sheet("Cost") 中,下面的代码中注释了一个错误。错误解决后,我计划在每个图表中放置一个“c(x)”计数器

运行时错误“1004”: 对象“_Worksheet”的方法“范围”失败

我认为错误与我引用另一张表的方式有关

Dim p As Worksheet, cost As Worksheet
Set cost = Workbooks("dashboard.xlsm").Worksheets("Cost")
Set p = Workbooks("dashboard.xlsm").Worksheets("p")

Dim c(1 To 3) As Variant

p.Activate
'[c(x)] denotes ranges for each chart object
'modified by counter [i], denoting ranges for each series
Set c(1) = p.Range(Cells(3, 1 + i), Cells(3, 1 + i).End(xlDown))
Set c(2) = p.Range(Cells(3, 4 + i), Cells(3, 4 + i).End(xlDown))
Set c(3) = p.Range(Cells(3, 8 + i), Cells(3, 8 + i).End(xlDown))

cost.Activate
For i = 1 To 2
    With ActiveSheet.ChartObjects("Chart 1").Chart.SeriesCollection(i)
    'all charts follow same time series
    .XValues = p.Range(Range("a3"), Range("a3").End(xlDown)) '**error here**
    .Values = c(1)
    End With
Next i

【问题讨论】:

尝试.XValues = p.Range(p.Range("a3"), p.Range("a3").End(xlDown)) 以便所有范围都使用工作表进行限定。 太完美了;有效。但是,现在我遇到的问题是,系列 i=1 的循环上的 c(1) 被系列 i=2 的循环上的 c(1) 删除并覆盖。有什么建议吗? 您的 XValues 或 Values 在循环的每次迭代中都不会改变 - 对吗? 从头开始,问题是 Xvalues 被读取为两个系列的 XValues 和 Values XValues 是常量,值应根据系列集合传入 i=1 或 i=2 到 c(1),它们将引用单独的列。我还用 p 限定了 c(1) 范围。您之前建议的地址 【参考方案1】:

尝试更换您的线路:

.XValues = p.Range(Range("a3"), Range("a3").End(xlDown))

与:

.XValues = "=" & p.Range(p.Range("a3"), p.Range("a3").End(xlDown)).Address(False, False, xlA1, xlExternal)

【讨论】:

以上是关于VBA循环使用另一张表中的数据更新图表中的系列的主要内容,如果未能解决你的问题,请参考以下文章

循环遍历一张表中的列值并将另一列中的 COUNTIF 值粘贴到另一张表中

Excel 一张工作表变动后,怎么自动更新另一张表中的数据

MAC VBA尝试从每个工作表中剪切一个单元格并粘贴到下一个空单元格中的另一张表中

根据另一张表中的值更新一张表

Excel VBA 将值从一张表移动到另一张表

Excel VBA 评估另一张工作表中的公式