Я пытаюсь написать обобщенную сортировку, которая будет сортировать коллекцию VBA по ключу. Я использую сортировку здесь в качестве отправной точки.
Сортировка не работает, если коллекция содержит объекты (как показано ниже). Как изменить код, чтобы получить ключ для сортировки?
Информация, которую я смог найти, получает коллекцию ключей, а не получает ключ для отдельного элемента (например, здесь: Коллекция VBA: список ключей ).
Текущий код, показанный ниже, дает «Объект не поддерживает это свойство или метод» в строке Debug.print.
Public Function sort(ByRef col As VBA.collection)
For i = 1 To col.Count - 1
For j = i + 1 To col.Count
Debug.Print ("Key: " & col(i))
If col(i) > col(j) Then
'store the lesser item
temp = col(j)
'remove the lesser item
col.Remove j
're-add the lesser item before the greater item
col.Add temp, temp, i
End If
Next j
Next i
End Function
Sub test()
Dim col As collection
Set col = New collection
Dim pi As ProgramIncrement
' val
Set pi = New ProgramIncrement
pi.name = "foo3"
col.Add pi, pi.name
' val
Set pi = New ProgramIncrement
pi.name = "foo0"
col.Add pi, pi.name
' val
Set pi = New ProgramIncrement
pi.name = "foo2"
col.Add pi, pi.name
' val
Set pi = New ProgramIncrement
pi.name = "foo1"
col.Add pi, pi.name
' sort
sort col
Debug.Print ("Done.")
End Sub
' ---------------------------------------------------------------
'
' Class to represent Program Increment
'
' ---------------------------------------------------------------
Public name As String
Public sprints As New collection