【问题标题】:Sorting a collection of objects in VBA在 VBA 中对对象集合进行排序
【发布时间】:2012-04-22 23:48:58
【问题描述】:

我正在尝试编写一个对对象集合进行排序的函数。由于对象都是相同的类型(相同的用户定义类),它们的属性集是相同的。是否有可能发现对象的属性(通过代码),从而将集合放入一个二维数组中,每一行代表一个对象,每一列代表它的一个属性?

另一种解决方案是将集合中的每个对象复制到一个对象数组中,并按其中一个属性对它们进行排序,该属性的名称作为字符串传递给函数。但我不明白如何使用作为字符串传递的属性名称来指向对象的属性。

【问题讨论】:

    标签: vba sorting collections excel


    【解决方案1】:

    对于一个集合,最好按它的键对其进行排序(这就是它们的用途)——但如果你没有键列表(丢失了你的键!):

    '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 成员变量是 >、

    祝你好运

    编辑:

    要以编程方式(作为字符串)访问您具有名称的属性,请在表单中使用 VB 的 CallByName function

     Result = CallByName(MyObject, "MyProperty", vbGet)
    

    【讨论】:

    • 如果集合中充满了对象我认为你需要 Set vTemp = Data(j)
    • 谢谢,但我如何编写该函数来按任意属性对数据进行排序?我必须在函数中硬编码属性的名称吗?我更喜欢将它作为参数传递。
    • 简单易行。使用CallByNamepcreview.co.uk/forums/…
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多