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
还有一件事。
考虑使用With
和End With
,因为你重复了很多ActiveChart.SeriesCollection(intSeries)
。 那么你的代码将更具可读性,因为你只是跳过这么长的一行! 这不是很棒?