У меня есть пользовательская форма, содержащая выпадающий список, который заполняется из уникальных элементов в столбце рабочей таблицы. Я пытаюсь отсортировать ключи, которые представляют элементы в выпадающем списке в порядке возрастания, используя приведенный ниже код, но я получаю сообщение об «Переменная объекта или переменная блока не установлена» ошибка:Словарь для сортировки ошибок по возрастающему значению ключа
Public Function funcSortKeysByLengthDesc(dctList As Object) As Object
Dim curKey As Variant
Dim key As Variant
Dim itX As Integer
Dim itY As Integer
Dim arrTemp() As Variant
Dim d As Object
'Only sort if more than one item in the dict
If dctList.Count > 1 Then
'Populate the array
ReDim arrTemp(dctList.Count)
itX = 0
For Each curKey In dctList
arrTemp(itX) = curKey
itX = itX + 1
Next
For itX = 0 To (dctList.Count - 2)
For itY = (itX + 1) To (dctList.Count - 1)
If arrTemp(itX) > arrTemp(itY) Then
curKey = arrTemp(itY)
arrTemp(itY) = arrTemp(itX)
arrTemp(itX) = curKey
End If
Next
Next
'Create the new dictionary
Set d = CreateObject("Scripting.Dictionary")
For itX = 0 To UBound(arrTemp)
d.Add arrTemp(itX), dctList(itX)
Next
Set funcSortKeysByLengthDesc = d
Else
Set funcSortKeysByLengthDesc = dctList
End If
End Function
ли не словарь требует два аргумента (пункт и ключ)? Похоже, вы только сохраняете ключ? – findwindow
Синтаксис словаря - это не то же самое, что и для 'array' (который вы написали). Вы добавляете элементы в словарь следующим образом: 'd.Add key, item' (https://support.microsoft.com/en-us/kb/187234). – Ambie
Я пытаюсь скопировать отсортированный словарь объекта в другой объект словаря. Как бы вы исправили эту строку кода 'd (arrTemp (itX)) = dctList (arrTemp (itX))? – ScoobyDoo2015