Сторнирование предметов в коллекции - PullRequest
5 голосов
/ 17 ноября 2010

Какой самый простой способ отменить элементы в коллекции VBA?

Ответы [ 3 ]

13 голосов
/ 17 ноября 2010

Не знаю какого-либо аккуратного способа сделать это, но вы могли бы сделать что-то вроде (код не проверен):

Dim MyNewCol as New Collection
For Each obj in MyCol
    If MyNewCol.Count > 0 Then
        MyNewCol.Add item := obj, before := 1
    Else
        MyNewCol.Add item := obj
    End If
Next
0 голосов
/ 12 августа 2018

Использует встроенный итератор поверх начальной коллекции.Чтобы использовать функцию «Добавить до», в коллекции должен быть хотя бы 1 элемент, поэтому добавьте элемент, а затем удалите его после завершения обращенной коллекции.

Sub ReverseCollection2(aCollection)

   Dim item As Variant
   Dim reversedCollection As New Collection
   reversedCollection.Add "dummy entry"
   For Each item In aCollection
       reversedCollection.Add item, Before:=1
   Next item
   reversedCollection.Remove reversedCollection.Count
End Sub
0 голосов
/ 12 августа 2018

Пошаговое выполнение начальной коллекции начинается с члена с наибольшим индексом. Добавляет каждого члена в обращенную коллекцию.

Sub ReverseCollection(aCollection)

    Dim ndx As Integer
    Dim max As Integer
    Dim reversedCollection As New Collection
    max = aCollection.Count + 1

    For ndx = 1 To aCollection.Count
        reversedCollection.Add aCollection(max - ndx)
    Next ndx
End Sub
...