コレクションの場合は、キーで並べ替えるのが最善です (それが目的です)。ただし、キー リストがない場合 (キーを紛失した場合):
'Give an input "Data As Collection"
Dim vItm As Variant
Dim i As Long, j As Long
Dim vTemp As Variant
For i = 1 To Data.Count – 1
For j = i + 1 To Data.Count
If CompareKeys(Data(i).myMemberKey, Data(j).myMemberKey) Then
'store the lesser item
vTemp = Data(j)
'remove the lesser item
Data.Remove j
're-add the lesser item before the greater Item
Data.Add vTemp, , i
End If
Next j
Next i
UDT メンバー変数が相互に >、<、または 0 の場合に true または false を返す独自の CompareKey 関数を考え出します。削除して再度追加する必要があるのは、vb6/vba コレクション オブジェクトの内部メンバーを「交換」できないためです。
幸運を祈ります
編集:
プログラムで (文字列として) 名前を持つプロパティにアクセスするには、次の形式でVB のCallByName
関数を使用します。
Result = CallByName(MyObject, "MyProperty", vbGet)