2012-04-02 47 views
0

我有一種將自定義對象添加到循環中的數組的方法。問題是,添加到數組的最後一個對象似乎覆蓋了數組中的所有其他對象。我已經加入了代碼,看到最初添加了正確的對象,但我似乎無法弄清楚爲什麼最後一個對象會覆蓋所有其他對象。我有一種感覺,它與內存指針和CallNum對象有關,但我一直無法找出這個問題。將對象添加到並且數組原始對象被覆蓋後

Function getCallNumObjects(TotalCol As Integer) As Lib_CallNum 
' 
' Find all the call numbers and their coresponding total 
' 
    Dim CallNumObjs() As Lib_CallNum 
    Dim i As Integer 

    i = 0 
    Do Until ActiveCell.Value = "$<total:U>" 
     If i <> 1 Or i <> 0 Then 
      ReDim Preserve CallNumObjs(i) As Lib_CallNum 
     End If 
     Dim CallNum As New Lib_CallNum 
     CallNum.Title = Replace(ActiveCell.Value & ActiveCell.Offset(1, 0).Value, " ", "") 
     CallNum.Total = ActiveCell.Offset(0, TotalCol - 1).Value 
     Set CallNumObjs(i) = CallNum 
     ActiveCell.Offset(2, 0).Activate 
     Debug.Print CallNumObjs(i).Title 
     i = i + 1 
    Loop 

    Debug.Print CallNumObjs(0).Title 
    Debug.Print CallNumObjs(1).Title 
    Debug.Print CallNumObjs(2).Title 



    Set getCallNumObjects = CallNumObjs 
End Function 

該函數的輸出是:

DS0000701-DS000800

LH-PK

PL001001-PL003300

在循環之後的打印件:

PL001001-PL003300

PL001001-PL003300

PL001001-PL003300

+0

有一點要注意的是,該行:如果我<>或者1 <> 0,則永遠是真實的,這是個好,否則這些元素不會被填滿。我認爲你可以刪除它。 – 2012-04-02 01:31:01

+0

那些不會總是評價爲真,循環經歷了兩次以上的多次。所以有時我> 1 – ferics2 2012-04-02 02:00:17

+0

我的意思是,我總是不等於1或不等於0.如果我等於1,它不等於0,反之亦然,因此該語句總是計算爲真。我相信你的意思是使用AND語句。但是,如果你這樣做,那麼陣列將不會被標註,直到我點擊2,並且你的代碼將失敗:設置Call​​NumObjs(i)= CallNum,當i = 0或i = 1時。 – 2012-04-02 02:09:21

回答

1

CallNumObjs是Lib_CallNum的陣列。該函數將該數組分配給Lib_CallNum的單個實例,而不是數組。也許如果你的功能被定義爲:

Function getCallNumObjects(TotalCol As Integer) As Lib_CallNum() 

編輯:我加入了從評論的變化並刪除了中間CallNum變量。這至少可以清除不需要的調試內容。另外,我覺得該變量的重複實例可能造成您的問題:

Function getCallNumObjects(TotalCol As Integer) As Lib_CallNum() 
    Dim CallNumObjs() As Lib_CallNum 
    Dim i As Integer 

    i = 0 
    Do Until ActiveCell.Value = "$<total:U>" 
     ReDim Preserve CallNumObjs(i) As Lib_CallNum 
     CallNumObjs(i).Title = Replace(ActiveCell.Value & ActiveCell.Offset(1, 0).Value, " ", "") = CallNum 
     CallNumObjs(i).Total = ActiveCell.Offset(0, TotalCol - 1).Value 
     ActiveCell.Offset(2, 0).Activate 
     i = i + 1 
    Loop 
    Set getCallNumObjects = CallNumObjs 
End Function 
+0

不是我的問題的答案,但我確實需要將其更改爲返回Lib_CallNum() – ferics2 2012-04-02 02:35:51