VBA: Удалить из коллекции определенное значение.

Автор Rengame113, 19 февраля 2019, 11:03

Rengame113

Как можно удалить запись в коллекции на зная его индекс?
Пример:
Код

    Dim cln As Collection
    Dim i As Long
   
    Set cln = New Collection
    cln.Add Item:="C:\1234\zapros1.xls"
    cln.Add Item:="C:\1234\zapros2.xls"
    cln.Add Item:="C:\1234\zapros3.xls"
    cln.Add Item:="C:\1234\zapros4.xls"
[свернуть]

Необходимо удалить  значение C:\1234\zapros3.xls.
Сложность в том что в данный момент у этой строки индекс 3, а завтра он может быть 20.

Администратор

Если искомое значение находится в нескольких элементах коллекции:
Макрос
Sub Макрос1()

    Dim cln As Collection
    Dim i As Long
   
    Set cln = New Collection
    cln.Add Item:="C:\1234\zapros1.xls"
    cln.Add Item:="C:\1234\zapros2.xls"
    cln.Add Item:="C:\1234\zapros3.xls"
    cln.Add Item:="C:\1234\zapros4.xls"
   
    For i = cln.Count To 1 Step -1
        If cln(i) = "C:\1234\zapros3.xls" Then
            cln.Remove i
        End If
    Next i
   
End Sub
[свернуть]

Если искомое значение находится только в одном элементе коллекции:
Макрос
Sub Макрос2()

    Dim cln As Collection
    Dim i As Long
   
    Set cln = New Collection
    cln.Add Item:="C:\1234\zapros1.xls"
    cln.Add Item:="C:\1234\zapros2.xls"
    cln.Add Item:="C:\1234\zapros3.xls"
    cln.Add Item:="C:\1234\zapros4.xls"
   
    For i = 1 To cln.Count
        If cln(i) = "C:\1234\zapros3.xls" Then
            cln.Remove i
            Exit For
        End If
    Next i
   
End Sub
[свернуть]

Администратор

Если значения в коллекции уникальные (не повторяются), то можно записать значения не только в Items, но и в Keys и затем можно удалить элемент, используя Key, без просмотра всех элементов:
Макрос
Sub Макрос3()

    Dim cln As Collection
   
    Set cln = New Collection
    cln.Add Item:="C:\1234\zapros1.xls", key:="C:\1234\zapros1.xls"
    cln.Add Item:="C:\1234\zapros2.xls", key:="C:\1234\zapros2.xls"
    cln.Add Item:="C:\1234\zapros3.xls", key:="C:\1234\zapros3.xls"
    cln.Add Item:="C:\1234\zapros4.xls", key:="C:\1234\zapros4.xls"
   
    cln.Remove "C:\1234\zapros3.xls"
   
End Sub
[свернуть]