【发布时间】:2018-08-24 14:54:44
【问题描述】:
我正在尝试创建一个绘制 X 和 Y 点的图表,但在每个系列的每个 X 点之间绘制一条线。有点像这样:
但是我的问题是我如何在 VBA 的 SeriesCollection 中定义我的 Xvalues 和 Values。这是因为我的值实际上存储在数组中。我使用了数组,因为我的数据是:
ID Age1 Age2 Per
1 21 22 54.2%
2 19 23 68.6%
3 18 23 42.0%
4 30 33 45.1%
5 17 19 33.0%
6 19 22 41.3%
7 22 27 20.4%
8 19 20 56.4%
9 30 33 42.8%
10 21 22 59.7%
所以我需要在 X 轴上绘制 Age1 和 Age2 中的值。对应的 Y 值在Per 列中。但我需要为每个ID. 创建一个新系列我有以下代码并标记问题所在。请注意,它不会编译。我认为问题在于我如何通过值来创建 XY 图表。我只想将值传递到图表上。
Sub name()
Dim age1 As Variant
Dim age2 As Variant
Dim per1 As Variant
Dim per2 As Variant
Dim id As Variant
Dim ln As Integer
Dim cht As Chart
Dim wb As Workbook
Dim ws As Worksheet
Dim xdata As Varaint
Dim ydata As Varaint
Set wb = ThisWorkbook
Set ws = wb.Sheets(1)
id = ws.Range("A2", Range("A2").End(xlDown)).Value
age1 = ws.Range("B2", Range("B2").End(xlDown)).Value
age2 = ws.Range("C2", Range("C2").End(xlDown)).Value
per1 = ws.Range("D2", Range("D2").End(xlDown)).Value
per2 = ws.Range("D2", Range("D2").End(xlDown)).Value
ln = UBound(id) - LBound(id) + 1
Set cht = ws.ChartObjects("chart").Chart
With cht
.ChartArea.ClearContents
.ChartType = xlXYScatter
For i = 1 To ln
xdata=Array(age1(i),age2(i)) 'I assumed this would get the values in age1(i) and age2(i) and plot those as the xdata
ydata=Array(per1(i),per2(i)) 'Same error as above, but would use ydata
.SeriesCollection.NewSeries
.SeriesCollection(i).XValues = xdata
.SeriesCollection(i).Values = ydata
.SeriesCollection(i).Name = id(i)
Next i
End With
End Sub
【问题讨论】:
-
如果您遇到运行时错误,那么它绝对会编译。如果你得到一个编译错误,那就不同了。具体错误是什么,是哪一行导致的?
-
另请注意:您已将
xdata和ydata声明为 Range 对象,但您从未将它们实例化为范围。实际的赋值语句xdata = ...可能还有其他问题,但是您不能在Nothing中输入值,这就是未实例化的范围对象的含义:) -
我将
xdata和ydata重新定义为变体。编译错误是语法错误。与cmets就行了 -
语法错误,因为
(age1(i),age2(i))不是 VBA 中任何内容的有效表示法。我认为这就是您的意思:xdata = Array(age1(i), age2(i))但如果不对其进行测试,我很确定这是行不通的,因为看起来您正在尝试将两个age数据的数组放入一个系列 @987654341 @。每个系列都必须有自己的 XValue。 -
使用您的建议编辑的代码,仍然显示下标超出范围。但现在它可以编译了。