2017-06-16 112 views
1

我的问题如下:我有一个Excel数据库的前端,包含材料数据。我有一个SQL查询来调出数据库中的x-y数据。例如这可能是一个应力 - 应变曲线。VBA中的范围集合

我想将这些数据显示为单独的曲线。由于所有测试的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数据的ListObject去。为每个x范围和y范围定义一个U(pper)和L(ower)边界单元格。如果X的值下降,这是来自下一个范围的x,因为x在x y数据中总是按照升序排列。然后保存范围并将U(pper)边界和循环单元向下移动到x和y的下一个范围。

X.item(1) 

不返回类型范围,而是变体。我怎样才能使它成为一个范围对象。换句话说,有没有一种方法可以将范围对象保存在其他没有预定义长度的对象中(排除数组)呢?

回答

0

解决了这个问题:有一个与collection.add 问题Apprenetly如果键入:

X.Add (xrng) 
    Y.Add (yrng) 

X(1)将具有变异型

如果键入:

X.Add xrng 
    Y.Add yrng 

类型将是范围。不知道为什么..

0

使用不带限定符的Range属性返回活动工作表中的Range对象,并且如果活动对象不是工作表,则返回Range对象的方法将失败。

您可以先激活工作表,就像这样:

Worksheets(1).Activate ' Where the desired worksheet is sheet 1. 
Set xrng = Range(U, L) 
Set yrng = Range(U.Offset(0, 1), L.Offset(0, 1)) 

或者,您可以使用Range属性之前的陈述对象限定词:

Dim ws As Worksheet 
Set ws = Worksheets(1) ' Where the desired worksheet is sheet 1. 
Set xrng = ws.Range(U, L) 
Set yrng = ws.Range(U.Offset(0, 1), L.Offset(0, 1)) 

考虑this link阅读开发者文档。

+0

虽然这是真的,但这不是问题。我确定该范围是指rigth工作表。问题是,如果你使用圆括号,范围将得到评估,它会返回我认为的变体类型。如果括号忽略,集合将添加一个范围类型。我的回答如下,它的工作原理是这样的。 –