Excel VBA-获取图表数据范围

凯斯·佩伦(Kes Perron)

我想将数据添加到一堆现有图表中。假设每个图表具有不同数量的数据系列,并且原始数据的位置在同一工作簿中。这是我的开始:

For iChart = 1 To iCount
    ActiveSheet.ChartObjects("Chart " & iChart).Activate
    intSeries = 1
    Do Until ActiveChart.SeriesCollection(intSeries).Name = ""
        Set rXVal = ActiveChart.SeriesCollection(intSeries).XValues '<- Object Required error
        Set rXVal = Range(rXVal, rXVal.End(xlDown))
        Set rYVal = ActiveChart.SeriesCollection(intSeries).Values
        Set rYVal = Range(rYVal, rYVal.End(xlDown))
        ActiveChart.SeriesCollection(intSeries).XValues = rXVal
        ActiveChart.SeriesCollection(intSeries).Values = rYVal
        intSeries = intSeries + 1
    Loop
Next iChart

我知道这ActiveChart...XValues = rXVal可行,但是我在Set rXVal = ActiveChart....XValues网上遇到“ Object Required”错误我假设既然有一个范围可以定义数据序列,那么我可以再次将该范围取回来,然后添加到其中。

更新
为了使情况更清楚一点,我在8个地方安装了加速度计,并安装了FFT软件来记录4个单独频带中的峰值振动响应。每个样本产生32个数据点。导出时,软件会吐出4张Excel工作簿。每个频段一个。每张表上都有加速度计名称,而样品编号在下方。

ZygD

我已成功使用以下语法:

Dim rXVal() As Variant
rXVal = ActiveChart.SeriesCollection(intSeries).XValues

更新

在这种情况下,您得到一个数组,因为给定的语句(ActiveChart.SeriesCollection(intSeries).XValues是一个数组而不是范围。如果您探究以下内容的Series对象,这就是您在Locals窗口中看到的内容ActiveChart.SeriesCollection(intSeries)

在此处输入图片说明

(在我的虚拟数据中,我有名为r1,r2,r3,r4的行。)

我想说的是,XValues没有任何属性可以表明其占用的范围。

如果您确实需要一个范围,我建议您从formula属性中获取它我建议的方式是用这一行替换引起错误的行:

Set rXVal = Range(Split(ActiveChart.SeriesCollection(intSeries).Formula, ",")(1))

接下来,我看到您正在尝试获取的范围Values同样,使用以下命令:

Set rYVal = Range(Split(ActiveChart.SeriesCollection(intSeries).Formula, ",")(2))

另一件事。

以下几行最终会导致您出错:

intSeries = 1
Do Until ActiveChart.SeriesCollection(intSeries).Name = ""
    ...some code...
    intSeries = intSeries + 1
Loop

使用以下方法更改它们:

For intSeries = 1 To ActiveChart.SeriesCollection.Count
    ...some code...
Next

还有一件事。

重复使用时请考虑使用Withand 然后,您的代码将更具可读性,因为您只需跳过这一行!那不是很棒吗???End WithActiveChart.SeriesCollection(intSeries)

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章