清理收藏品的理想方式

时间:2016-06-14 19:10:49

标签: vba excel-vba excel

在我的程序中,我有多个collections是数据模板。这些集合将备有数据,并在我的重复过程中被清空,然后重新填充。我已经读过,我可以这样做:set myCollection = new Collection基本上将其清除以便重复使用。

我也见过set myCollection = Nothing。是否有一种处理现有馆藏清理的首选方法?

1 个答案:

答案 0 :(得分:15)

我从一篇澄清这一点的文章中提取了相关部分。 使用Set表示集合的行为与将集合设置为空时的行为不同。下一节将对此进行解释。

从集合中删除所有项目

要从集合中删除所有项目,您只需将其设置为空即可。

Set Coll = Nothing

这里需要了解的重点是,这取决于您创建集合的方式。正如我们所看到的,您可以通过使用New或使用Set和New来声明来创建Collection。让我们看看两种类型

声明使用新

如果将此集合设置为空,则将其设置为“未设置对象”的状态。添加新项目时,VBA会自动将Collection变量设置为有效集合。

换句话说,如果您将集合设置为空,它将清空所有项目。如果您随后将一个项目添加到集合中,您现在将拥有一个包含一个项目的集合。这样可以简化清空集合。

以下代码演示了这一点。

Sub EmptyColl()

    ' Create collection and add items
    Dim coll As New Collection

    ' add items here

    ' Empty collection
    Set coll = Nothing

    ' Add item
    coll.Add "Pear"

End Sub

这里要强调的一个细微之处在于,当您将集合设置为Nothing时,它实际上并未设置为空。因此,如果你试图将它与它进行比较它将无法正常工作。

使用Set和New

使用Set创建集合时,如果将其设置为Nothing,则必须再次创建集合。在设置为空之后的以下代码中,您必须再次使用new进行设置。如果不这样做,您将收到错误:“对象变量或未设置块变量”。

Sub EmptyCollSet()

    ' Create collection
    Dim coll As Collection
    Set coll = New Collection

    ' Add items here

    ' Empty collection
    Set coll = Nothing

    ' SET TO NEW BEFORE USING
    Set coll = New Collection

    ' Add item
    coll.Add "Pear"

End Sub

全部删除 - 另类方法

以下方法也会删除集合的所有元素,但执行速度较慢。无论您以何种方式创建集合,其优点都在起作用。

Sub RemoveAll(ByRef coll As Collection)

    Dim i As Long
    For i = coll.Count To 1 Step -1
        coll.Remove i
    Next i

End Sub

详情请参阅The Ultimate Guide To Collections in Excel VBA by Paul Kelly