强制垃圾收集

时间:2009-11-21 13:23:16

标签: excel vba excel-vba excel-2000

有没有办法强制在VBA / Excel 2000中进行垃圾回收?

此问题涉及Excel中的宏语言。 不使用VB .NET来操作Excel。所以GC.collect()将不起作用

3 个答案:

答案 0 :(得分:12)

使用直接VBA时,无法利用.NET Framework提供的垃圾回收。 Eric Lippert的Perhaps this article会很有帮助

答案 1 :(得分:7)

您无法在VBA中强制GC,但最好将全局变量设置为Nothing。

kd7提到的文章说,在超出范围之前将局部变量设置为Nothing是没用的,但是没有谈论全局变量。

在VBA中,模块中定义的全局变量在整个Excel会话中保持活动状态,即直到包含定义它们的VBA模块的文档关闭。

所以当O是本地的时候不要放置无用的Set O = Nothing,但是当它是全局的时候就这样做。

答案 2 :(得分:3)

VBA / Excel没有垃圾收集,就像旧的VB一样。它使用引用计数代替GC。将指针设置为空(或当变量超出范围时)时,将释放内存。就像在旧VB中一样,这意味着永远不会释放循环引用。