【发布时间】:2017-04-20 08:44:50
【问题描述】:
这是我在 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 个项目的文件夹中运行它,这需要很长时间。
所以我的问题是:我可以做些什么来提高性能?
提前感谢您的帮助
【问题讨论】:
-
实际需要多长时间?请删除
On Error resume Next部分以查看是否有任何错误导致延迟。如果是这样,请在此处发布错误消息。 -
将
Items集合分配给一个局部变量。这避免了在For Each循环中重新评估完整的对象链。 -
On Error Resume Next 仅应在有特定目的绕过错误然后使用 On Error GoTo 0 关闭的情况下使用。请参阅stackoverflow.com/questions/31753201/… 和 stackoverflow.com/questions/29390673/…
-
感谢您的回复。 resume next 语句有其用途,因为列表中有大约 100 个项目由于某种原因已损坏且无法读取。
-
感谢本地化项目集合的想法。我会试试这个并衡量性能。
标签: vba performance outlook-2010