如何让我的 VBA Outlook 脚本更有效率

How can I make my VBA Outlook script more efficient

这是我在 StackExchange 上的第一个问题:-) 我是 运行 MS Outlook 中的以下脚本 VBA

Sub export()

    On Error resume Next

    Dim Ns As Outlook.NameSpace
    Dim eitem
    Dim oFile As Object
    Dim fso As Object

    Set Ns = Application.GetNamespace("MAPI")
    Set fso = CreateObject("Scripting.FileSystemObject")
    Set oFile = fso.CreateTextFile("C:\Users\chakkalakka\Desktop\mails.txt")

    'Code
    For Each eitem In Ns.Session.Folders.Item(12).Items
        oFile.WriteLine eitem.SenderName & "§" & eitem.SentOnBehalfOfName & "§" & eitem.ReceivedTime
    Next

    oFile.Close
    Set Ns = Nothing
    Set fso = Nothing
    Set oFile = Nothing

    Debug.Print "Completed!"

End Sub

脚本总体上运行良好,输出正确。我的问题是:我需要 运行 在一个包含 > 95000 个项目的文件夹中,这需要很长时间。

所以我的问题是:我可以做些什么来提高性能?

在此先感谢您的帮助

效率最低的代码行如下:

For Each eitem In Ns.Session.Folders.Item(12).Items

您需要打破 属性 和方法调用的链条,并在单独的行中声明它们。因此每个 属性 或方法都将在单独的代码行中声明。因此,您将能够立即释放底层 COM 对象。在 Visual Basic 中将变量设置为 Nothing 以释放对该对象的引用。

遍历文件夹中的所有项目是一项耗时的任务。相反,我建议使用 Items class 的 Find/FindNextRestrict 方法来处理符合您条件的项目。在以下文章中阅读有关这些方法的更多信息:

您也可以考虑使用文件夹 class 的 GetTable 方法,该方法允许获取 Table 对象,其中包含由 Filter 过滤的项目。如果 Filter 是空字符串或省略 Filter 参数,GetTable returns 一个 Table 行代表文件夹中的所有项目。