【发布时间】:2022-03-18 18:00:25
【问题描述】:
我有这个脚本可以自动将 Outlook 中的附件保存在一个文件夹中,但它一次只能保存 2 封电子邮件中的附件。如何将其增加到 3 或 4?
Const olFolderInbox = 6
Set objOutlook = CreateObject("Outlook.Application")
Set objNamespace = objOutlook.GetNamespace("MAPI")
Set objMailbox = objNamespace.Folders("Mailbox - ABC")
Set objFolder = objMailbox.Folders("Inbox")
Set colItems = objFolder.Items
Set colFilteredItems = colItems.Restrict("[UnRead] = True")
For Each objMessage in colFilteredItems
intCount = objMessage.Attachments.Count
If intCount > 0 Then
For i = 1 To intCount
objMessage.Attachments.Item(i).SaveAsFile "C:\" & _
objMessage.Attachments.Item(i).FileName
Next
End If
objMessage.Unread = False
Next
【问题讨论】:
-
Item(i).FileName可能为空或无效。您可以尝试Item(i).DisplayName或创建一个人工名称,如"att" & i & ".dat"。使用Debug.print记录名称。不建议将文件直接写入“C:\”。你可能会破坏你的系统。获取另一个您有足够访问权限的目录。检查Attachment.Type属性并跳过嵌入式附件(olEmbeddedItem = 5)。它们不能保存为文件。 -
@Axel 谢谢,我会尝试显示名称并跳过嵌入式项目,看看它是否有效
-
@Axel - 不起作用。问题似乎是它不检查超过 2 封电子邮件。一旦它查看电子邮件,它就会下载所有附件。因此,如果我有 3 封带附件的未读电子邮件,它只会阅读 2 封电子邮件并留下第三封。
-
如果您正在循环浏览一个文件夹,则可能有没有 MailItems 的项目对象。使用
if objMessage.Class = olMail then ...避免错误。 -
这段代码看起来很可靠,可能是 saveasfile 命令需要很长时间才能处理,或者您的错误处理没有任何指示。也许在“SaveAsFile”命令之后添加“if err.number 0 then msgbox err.description”?