将对象添加到并且数组原始对象被覆盖后

问题描述:

我有一种将自定义对象添加到循环中的数组的方法。问题是,添加到数组的最后一个对象似乎覆盖了数组中的所有其他对象。我已经加入了代码,看到最初添加了正确的对象,但我似乎无法弄清楚为什么最后一个对象会覆盖所有其他对象。我有一种感觉,它与内存指针和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

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