【发布时间】:2017-11-18 22:51:10
【问题描述】:
我的问题如下:我有一个用于 Oracle 数据库的 Excel 前端,其中包含材料数据。我有一个 SQL 查询,它显示了数据库中的 x-y 数据。例如,这可能是一条应力-应变曲线。
我想将此数据显示为单独的曲线。由于所有测试的 x 和 y 数据现在分为两列,一列用于 x,另一列用于 y,我需要将它们拆分。我不想为此打开一个新的工作表,所以我决定制作两个范围集合。一个集合将包含所有 x 范围,一个集合将包含所有 y 范围。
所以不同的曲线在彼此下方。我有一个代码可以拆分它们并生成范围。我 95% 确定拆分代码有效,但问题是现在无法从我那里访问集合中的项目。这里是代码,这样您就可以自己了解正在发生的事情
Sub Split()
Dim X As New Collection, Y As New Collection
Dim tbl As ListObject
Dim cell As Range, rng As Range, xrng As Range, yrng As Range
Dim U As Range, L As Range ' upper and lower boundary of each x and y range
Dim i As Integer
Set tbl = Data.ListObjects(1)
Set cell = tbl.ListColumns(35).DataBodyRange(1, 1)
Do While Not (IsEmpty(cell))
Set U = cell
Set L = cell
Do While (L.Value < L.Offset(1, 0).Value) And (Not (IsEmpty(L.Offset(1, 0))))
Set L = L.Offset(1, 0)
Loop
Set xrng = Range(U, L)
Set yrng = Range(U.Offset(0, 1), L.Offset(0, 1))
X.Add (xrng)
Y.Add (yrng)
' move one down
Set U = L.Offset(1, 0)
Set cell = U
Loop
Debug.Print xrng.Select ' returns TRUE
Debug.Print X.Item(X.Count).Select ' Error Object needed
End Sub
代码的简短描述是:遍历带有 x 和 y 数据的列表对象。为每个 x 范围和 y 范围定义一个 U(pper) 和 L(ower) 边界单元。如果 X 值下降,这是下一个范围的 x,因为 x 在 x y 数据中始终是升序排列的。然后保存范围并将 U(pper) 边界和循环单元向下移动到 x 和 y 的下一个范围。
X.item(1)
不返回类型范围,而是返回变体。我怎样才能使它成为一个范围对象。或者换句话说,有没有办法将范围对象保存在没有预定义长度的其他对象中(排除数组)?
【问题讨论】: