Jos*_*son 12 excel vba excel-vba
在我的程序中,我有多个collections是数据模板.这些集合将备有数据,并在我的重复过程中被清空,然后重新填充.我已经读过,我可以这样做:set myCollection = new Collection基本上将其清除以便重复使用.
我也见过set myCollection = Nothing.是否有一种处理现有馆藏清理的首选方法?
小智 17
我从文章中提取了相关部分,澄清了这一点.使用Set表示集合的行为与将集合设置为空时的行为不同.下一节解释了这一点.
从集合中删除所有项目
要从集合中删除所有项目,您只需将其设置为空即可.
Set Coll = Nothing
Run Code Online (Sandbox Code Playgroud)
这里需要了解的重点是,这取决于您创建集合的方式.正如我们所看到的,您可以通过使用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
Run Code Online (Sandbox Code Playgroud)
这里要强调的一个细微之处在于,当您将集合设置为Nothing时,它实际上并未设置为空.因此,如果你试图将它与它进行比较它将无法正常工作.
使用Set和New
使用"设置"创建集合时,如果将其设置为"无",则必须再次创建该集合.在设置为空之后的以下代码中,您必须再次使用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
Run Code Online (Sandbox Code Playgroud)
全部删除 - 另一种方法
以下方法也将删除集合的所有元素,但这是一种较慢的方法.无论您以何种方式创建集合,其优点都将起作用.
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
Run Code Online (Sandbox Code Playgroud)
有关详细信息,请参阅Paul Kelly撰写的Excel VBA中的终极指南
| 归档时间: |
|
| 查看次数: |
12163 次 |
| 最近记录: |