ループ内の配列にカスタムオブジェクトを追加する方法があります。問題は、配列に最後に追加されたオブジェクトが配列内の他のすべてのオブジェクトを上書きするように見えることです。私は正しいオブジェクトが最初に追加されていることを確認するコードをステップしましたが、私は最後のオブジェクトが他のオブジェクトをすべて上書きする理由を理解できないようです。私はそれがメモリポインターと私の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
ことの一つは、その行である:I <> 1または私は<> 0そして、常にtrueになります場合は、これは良いです。また、私はその変数の繰り返しインスタンス化はあなたの問題を引き起こしているかもしれないと思いますそうでなければ、それらの要素は満たされません。私はあなたがそれを削除できると思う。 –
これらは常に真と評価されるとは限りません。ループは多くの場合2回以上実行されます。だからときどき私> 1 – ferics2
私が意味するのは、常に1に等しくないか0に等しくないということでした。もしiが1ならば、0と等しくなく、その逆でもないので、ステートメントは常にTrueと評価されます。私はあなたがANDステートメントを使用することを意味すると信じています。しかし、そうした場合、配列が2になるまで配列の大きさは決まらず、コードは行上で失敗します:Set CallNumObjs(i)= CallNum、i = 0またはi = 1の場合 –