2017-06-16 108 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工作表。問題是,如果你使用圓括號,範圍將得到評估,它會返回我認爲的變體類型。如果括號忽略,集合將添加一個範圍類型。我的回答如下,它的工作原理是這樣的。 –