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