、それはキー(つまり、彼らがそこにいるものだ)だことによってそれを並べ替えることが最善である - しかし、場合にあなたがキーリストを持っていない(あなたの鍵を失った!):
'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コレクションオブジェクトの内部メンバーを「スワップ」できないためです。
EDIT運のベスト:
あなたがプログラム的に(文字列として)の名前を持つプロパティにアクセスするには、VBのCallByName
function形式でを使用します。
Result = CallByName(MyObject, "MyProperty", vbGet)
コレクションの場合あなたが必要と思うオブジェクトがいっぱいです。Set vTemp = Data(j) –
ありがとうございます。しかし、任意のプロパティでデータをソートするにはどうすればいいですか?関数内のプロパティの名前をハードコードする必要がありますか?私は議論としてそれを渡すことを好むだろう。 – Cutter
パイとして簡単。 'CallByName'を使う:http://www.pcreview.co.uk/forums/vb6-access-object-properties-name-t1409534.html –