我使用以下宏循环访问集合中存储的文件路径。在某些测试目录上,总运行时间为 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/