2

VBA でいくつかの異なるコレクションを作成するプログラムがあります。プログラムが完了したら、各コレクションのレコードを削除する必要があります。次のコードを使用して、コレクションを静的に削除できました。

Sub Empty_Collections()
    Dim Count As Integer
    Dim i As Long

    Count = Managers.Count
    For i = 1 To Count
         Managers.Remove (Managers.Count)
    Next i

    Count = FS.Count
    For i = 1 To Count
         FS.Remove (FS.Count)
    Next i

    Count = Staff.Count
    For i = 1 To Count
         Staff.Remove (Staff.Count)
    Next i

    Count = Clusters.Count

    For i = 1 To Count
         Clusters.Remove (Clusters.Count)
    Next i

End Sub

ただし、将来コレクションを追加する可能性があるため、次のようなコードを作成することは可能ですか。

Dim Item As Collection
Dim Count As Integer
Dim i As Long

For Each Item In Worksheets
    Count = Item.Count

    For i = 1 To Count
         Item.Remove (Item.Count)
    Next i

Next
4

1 に答える 1

0

このようなグローバルを作成することをためらっていますが、可能な解決策は次のとおりです。

ThisWorkbookExcel オブジェクトに、次を追加します。

Private pCollections As Collection
Public Property Get Collections() As Collection
    If pCollections Is Nothing Then: Set pCollections = New Collection
    Set Collections = pCollections
End Property
Public Property Set Collections(Value As Collection)
    Set pCollections = Value
End Property

Public Sub AddCollection(Name As String)
    Dim Coll As New Collection
    Me.Collections.Add Coll, Name
End Sub

Public Sub EmptyCollections()
    Dim Coll As Collection
    For Each Coll In Me.Collections
        EmptyCollection Coll
    Next Coll
End Sub

Private Sub EmptyCollection(ByRef Coll As Collection)
    Do While Coll.Count > 0
        ' Remove items from the end of the collection
        Coll.Remove Coll.Count
    Loop
End Sub

次に、次のようにコレクションを追加して操作します。

' Add collections
' (without helper)
Dim Managers As New Collection
ThisWorkbook.Collections.Add Managers, "Managers"

' (with helper)
ThisWorkbook.AddCollection "FS"
ThisWorkbook.AddCollection "Staff"
ThisWorkbook.AddCollection "Clusters"

' Add items to collection
' (access collection via named key for ease-of-use)
ThisWorkbook.Collections("Managers").Add "Alice"
ThisWorkbook.Collections("Managers").Add "Bob"

' (or original reference if desired
Managers.Add "Carl"

Debug.Print Managers.Count ' => 3
Debug.Print ThisWorkbook.Collections("Managers").Count ' => 3

' Add collection later
ThisWorkbook.AddCollection "FutureCollection"

' Empty all collections
ThisWorkbook.EmptyCollections

これは探しているものよりも少し複雑かもしれませんが、コレクションを中央の場所に追加して、後ですべてを空にできるという利点があります。

于 2013-11-19T19:18:00.667 に答える