VBA代码转移excel图表中的sourcedata

我正在尝试在图表中更新我的sourcedata。 我不想要一个dynamic范围,因为图表将每次点击每个button时从新的范围拉动。 如果我使用dynamic或命名范围,我被locking在该范围内。

我努力了:

ActiveSheet.ChartObjects("Chart 2").Activate ActiveChart.PlotArea.Select ActiveChart.SetSourceData Source:=Range("A1:C3").Offset(0,3) 

这只能工作一次,虽然。 要清楚,我有一个button来更新电子表格上的图表。 点击button时,macros将查看活动图表中的当前数据,并将源移动超过3列。 每次单击该button时都会发生这种情况,并且数据必须保留在工作表上。 我已经用尽了我所知道的一切,并可以在网上findGoraclesearch。

任何帮助?

在此先感谢,莉莉丝

ActiveChartSeriesCollection(j)总是有一个Formula属性,如下所示:

 =SERIES(,,Sheet1!$A$1:$C$3,1) 

因此,您可以将自定义函数添加到parsingstringSplit by $项目中,并返回相应的3列的范围移位:

 Function ShiftBy3(ByVal formulaString As String) As String cRange = Split(formulaString, "$")(1) + Split(formulaString, "$")(2) + Split(formulaString, "$")(3) + Split(Split(formulaString, "$")(4), ",")(0) newAddress = Range(cRange).Offset(0,3).Address ShiftBy3 = Split(formulaString, "$")(0) + newAddress + "," + Split(Split(formulaString, "$")(4), ",")(1) End Function 

然后每次都重新设置公式

 ActiveChart.SeriesCollection(1).Formula = ShiftBy3(ActiveChart.SeriesCollection(1).Formula) 

一种方法是更新图表上每个系列的Formula属性:

 Sub Tester() Const SER As String = "=SERIES(" Dim s As Series, f As String, arr, rng1, rng2, sn Dim cht As Chart Set cht = ActiveSheet.ChartObjects("Chart 2").Chart sn = ActiveSheet.Name For Each s In cht.SeriesCollection f = s.Formula Debug.Print f '<<<added f = Replace(f, SER, "") f = Left(f, Len(f) - 1) arr = Split(f, ",") Set rng1 = Range(arr(1)) Set rng2 = Range(arr(2)) s.Formula = SER & Join(Array(arr(0), _ rng1.Parent.Name & "!" & rng1.Offset(0, 3).Address(), _ rng2.Parent.Name & "!" & rng2.Offset(0, 3).Address(), _ arr(3)), ",") & ")" Next s End Sub 

这是我老板提出的工作守则。

 Dim var var = Cells(4, 4) ActiveSheet.ChartObjects("Chart 2").Activate ActiveChart.PlotArea.Select ActiveChart.SetSourceData Source:=Range(Cells(1, 1 + var), Cells(3, 3 + var)) Cells(4, 4).Value = Cells(4, 4).Value + 3 

感谢Tim和Matteo为你们所有的时间和帮助。 我真的很感激!