Excel 使用ArrayList对字典键进行排序

Excel 使用ArrayList对字典键进行排序,excel,vba,Excel,Vba,我似乎无法使用ArrayList对dictionary对象进行排序。代码可以工作,这意味着它返回一个来自范围(“A1:A20”)的唯一值列表。它只是没有对值进行排序。有什么想法吗 Option Explicit Public Sub Test() Dim wb As Workbook Set wb = ActiveWorkbook Dim ws As Worksheet Set ws = wb.ActiveSheet Dim rng As ListO

我似乎无法使用
ArrayList
对dictionary对象进行排序。代码可以工作,这意味着它返回一个来自
范围(“A1:A20”)
的唯一值列表。它只是没有对值进行排序。有什么想法吗

Option Explicit

Public Sub Test()
    Dim wb As Workbook
    Set wb = ActiveWorkbook

    Dim ws As Worksheet
    Set ws = wb.ActiveSheet

    Dim rng As ListObject
    Set rng = ws.ListObjects(1)

    Dim arr() As Variant
    arr = Application.Transpose(rng.DataBodyRange.Value)

    Dim d As Scripting.Dictionary
    Set d = GetUnique(arr)

    Dim tempD As Scripting.Dictionary
    Set tempD = New Scripting.Dictionary

    Set tempD = SortDictionary(d)

    Dim key As Variant
    For Each key In d.Keys
        Debug.Print key, d.Item(key)
    Next key
End Sub

Private Function GetUnique(ByRef arr() As Variant) As Scripting.Dictionary
    Dim v As Variant
    Set GetUnique = New Scripting.Dictionary
    On Error Resume Next
    For Each v In arr
        GetUnique.Add v, v
    Next v
End Function

Private Function SortDictionary(dicObject As Scripting.Dictionary, Optional xlSortOrder As xlSortOrder = xlAscending) As Scripting.Dictionary
    Dim obj As Object
    Set obj = CreateObject("System.Collections.ArrayList")

    Dim v As Variant
    With obj
        For Each v In dicObject
            .Add v
        Next v
        .Sort
    End With

    Dim tempDic As Scripting.Dictionary
    Set tempDic = New Scripting.Dictionary

    Dim k As Variant
    For Each k In obj
        tempDic.Add k, dicObject(k)
    Next k

    Set SortDictionary = tempDic
End Function

这是因为,当您将已排序字典指定给
tempD
时,您引用的是原始的未排序字典。试试看

For Each key In tempD.Keys
    Debug.Print key, tempD.Item(key)
Next key

希望这有帮助

您正在打印未排序字典
d
的键,而不是已排序字典
tempD
@RonRosenfeld的键,我现在看到了。谢谢你,罗恩!不知道我怎么会错过这个。非常感谢。