首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在excel图表中移动源数据的VBA代码

在excel图表中移动源数据的VBA代码
EN

Stack Overflow用户
提问于 2015-04-21 05:19:32
回答 3查看 2.2K关注 0票数 0

我正在尝试更新图表中的源数据。我不想要一个动态范围,因为每次点击按钮,图表都会从新的范围中拉出。如果我使用动态范围或命名范围,我将被锁定在该范围内。

我试过了:

代码语言:javascript
复制
ActiveSheet.ChartObjects("Chart 2").Activate

ActiveChart.PlotArea.Select

ActiveChart.SetSourceData Source:=Range("A1:C3").Offset(0,3)

不过,这只有效一次。为了清楚起见,我有一个按钮来更新电子表格中的图表。单击该按钮时,宏将查看活动图表中的当前数据,并将源数据移动到3列上。每次单击按钮时都会发生这种情况,并且数据必须留在工作表上。我已经用尽了所有我知道的和可以在网上找到的Goracle搜索。

有什么帮助吗?

提前谢谢你,莉莉丝

EN

回答 3

Stack Overflow用户

发布于 2015-04-21 06:59:47

ActiveChartSeriesCollection(j)始终具有如下所示的Formula属性:

代码语言:javascript
复制
=SERIES(,,Sheet1!$A$1:$C$3,1)

因此,您可以向您的项目添加一个自定义函数,该函数通过$解析字符串Split,并返回相应的3列范围移位:

代码语言:javascript
复制
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

然后每次只需重新设置公式即可进行转换:

代码语言:javascript
复制
ActiveChart.SeriesCollection(1).Formula = ShiftBy3(ActiveChart.SeriesCollection(1).Formula)
票数 1
EN

Stack Overflow用户

发布于 2015-04-21 07:00:27

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

代码语言:javascript
复制
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
票数 1
EN

Stack Overflow用户

发布于 2015-04-22 04:50:50

这是我老板想出来的工作代码。

代码语言:javascript
复制
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所有人的时间和帮助。我真的很感激!

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29758608

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档