Excel VBA – 获取图表数据范围

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

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线。 我假设,自从一个范围进入定义数据系列,我可以再次得到该范围,然后添加到它。

UPDATE
为了澄清一些事情,我有8个地方的加速度计和FFT软件设置,logging4个独立频段的峰值振动响应。 这样每个样本产生32个数据点。 导出时,软件吐出一张Excel工作簿4张; 每个频段一个。 每个工作表都有加速度计名称,样本数量也在下降。

我已经成功地使用这个语法:

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

UPDATE

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

在这里输入图像说明

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

我想说的是, XValues没有任何财产来表明它的占领范围。

如果你真的需要一个范围 ,我会build议从formula属性中获取它。 我build议的方式是用这个replace你的错误导致行:

 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 

还有一件事。

考虑使用WithEnd With ,因为你重复了很多ActiveChart.SeriesCollection(intSeries) 。 那么你的代码将更具可读性,因为你只是跳过这么长的一行! 这不是很棒?