VBA - 释放 Word.Application 和 Word.Document 对象

标签 vba ms-word

我使用以下宏循环访问集合中存储的文件路径。在某些测试目录上,总运行时间为 2.3 秒(未将 openedApp 和 openedDoc 设置为空)和 2.75 秒。在这种情况下是否需要释放这两个对象?我打算在包含数千个文件的目录上使用宏,因此我想避免任何可能导致错误或减慢宏执行速度的内存问题。

Dim openedApp As Word.Application
Dim openedDoc As Word.Document

For Each filePath In filesCollection       

    Set openedApp = New Word.Application
    Set openedDoc = openedApp.Documents.Open(filePath)
    'openedApp.Visible = True

    openedDoc.Close
    openedApp.Quit

    Set openedApp = Nothing: Set openedDoc = Nothing

Next filePath

最佳答案

无需将变量显式设置为 Nothing。如 this answer 所述VB6 使用引用计数 GC。当给定对象的最后一个引用设置为 Nothing 时,确定性地触发 GC。 将本地引用设置为 Nothing 是不必要的,当它们超出范围时会发生这种情况。

事实上,如果性能很重要,您可以将 Word 应用程序的创建移到循环体之外:

Dim openedApp As Word.Application
Dim openedDoc As Word.Document

Set openedApp = New Word.Application

For Each filePath In filesCollection       

    Set openedDoc = openedApp.Documents.Open(filePath)

    openedDoc.Close

Next filePath

openedApp.Quit

关于VBA - 释放 Word.Application 和 Word.Document 对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40650056/

相关文章:

excel - 在 VBA 函数中使用 Round 函数

vba - 记录集.movefirst "Rowset position cannot be restarted"

excel - 使用循环验证用户窗体以检查空控件

excel - 单步执行代码(F8)时Excel无法关闭Word

C# word 自动查找和替换长文本字段

php - 使用 PHP 转换 Microsoft Word 特殊字符

excel - 如何强制Excel单元格以指数方式改变颜色?

sql - 使用 VBA 遍历记录集

当我恢复修订时锁定每个循环的 VBA

c# - 如何读取.Doc模板文件并使用值编辑模板?