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。
任何帮助?
在此先感谢,莉莉丝
ActiveChart
的SeriesCollection(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为你们所有的时间和帮助。 我真的很感激!