如何更快地清除VBA收藏?

问题描述 投票:0回答:1
Set myCollection = Nothing

技术都花费了太长时间以无法清除收藏。如果我不清除它,我的代码通常在后台执行清理时结束。

有一种快速的方法可以清除VBA中的收集吗?我如何避免这个问题?
注:逐项删除技术(
collection.Remove(i)

)也花费了太长时间。 我尝试使用我在互联网上看到的所有主要解决方案:

Set myCollection = New Collection

Set myCollection = Nothing

collection.Remove(i)

	
这种缓慢行为的原因不是清除集合,而是所有对象都需要被破坏的事实。
每当删除对它们的最后一个引用时,VBA中的对象就会被销毁。您可以通过创建两个集合并将对象添加到两个集合中来轻松证明这一点:清除第一个集合将立即运行(方法不起作用),因为没有任何对象都被破坏。
Sub testSub() Const maxEntries = 100000 Dim c1 As New Collection, c2 As New Collection Dim i As Long For i = 1 To maxEntries ' Create dummy object Dim o As Class1 Set o = New Class1 o.s = "Test" & i o.v = i * 1.23 c1.Add o, CStr(i) c2.Add o, CStr(i) Next Debug.Print "Start to clear " & Now Set c1 = New Collection Debug.Print "First collection cleared " & Now Set c2 = New Collection Debug.Print "Second collection cleared " & Now Debug.Print "Done " & Now End Sub Start to clear 17.03.2025 09:32:03 First collection cleared 17.03.2025 09:32:03 Second collection cleared 17.03.2025 09:32:08 Done 17.03.2025 09:32:08
您可以看到,清除第二个系列花了5秒,而第一个收藏可以立即清除。如果您不清除集合,则在代码完成时出现相同的等待时间。
I don't think that you can to anything against that.您可以通过一一删除元素并添加一些序列来减轻效果。这样,用户就可以继续在Excel上做些事情。但是,您需要注意用户的工作不会干扰宏运行。请注意,

DoEvent
excel vba memory memory-management collections
1个回答
0
投票
DoEvent

最新问题
© www.soinside.com 2019 - 2025. All rights reserved.