我正在尝试编写一个对对象集合进行排序的函数。由于对象都是相同的类型(相同的用户定义的类),因此它们的属性集是相同的。是否有可能发现对象的属性(通过代码),以便将集合放在一个二维数组中,每一行都是一个对象,每一列都是一个属性?
另一种解决方案是将每个对象从集合中复制到一个对象数组,并按其属性之一对其进行排序,其属性作为字符串传递给函数。但我不知道如何使用作为字符串传递的属性名称指向对象的属性。
答案 0 :(得分:6)
对于一个集合,最好通过它的键(这就是它们的用途)对它进行排序 - 但是如果你没有键列表(丢失你的键!):
'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
提出你自己的CompareKey函数,如果UDT成员变量是>,则返回true或false。或0到另一个。您必须删除和重新添加的原因是因为您无法在vb6 / vba集合对象中“交换”内部成员。
祝你好运
编辑:
要以编程方式(作为字符串)访问属性,请使用以下格式的VB CallByName
function:
Result = CallByName(MyObject, "MyProperty", vbGet)