首页 > 解决方案 > 使用 VBA 向 Outlook 邮件添加附件失败并出现错误 80070005(权限不足),但前提是邮件还没有附件

问题描述

我正在使用 Word 2013 邮件合并创建一堆电子邮件(不确定英文术语;我正在使用德文版本)。Outlook 设置为离线模式,以便我可以在发送前修改邮件。到目前为止,一切正常。

我想为每封电子邮件添加附件,并尝试编写一些 Outlook VBA 脚本来执行此操作。以下代码在.Attachment.Add...语句中失败,代码为 80070005(权限不足),前提是邮件还没有附件。如果有附件,它会将附件添加到这封邮件下一封邮件,然后再次失败并显示 80070005。我重复运行脚本,每次运行时它都会将附件添加到另外一封邮件。

什么可能导致 80070005?

Sub addAttachmentsToMailsInOutbox()

Dim olNs As Outlook.NameSpace
Dim olOutbox As Outlook.MAPIFolder
Dim olItem As Object
Dim olEmail As Outlook.MailItem

Set olNs = GetNamespace("MAPI")
Set olOutbox = olNs.GetDefaultFolder(olFolderOutbox)

For Each olItem In olOutbox.Items
    If olItem.Class = olMail Then
        Set olEmail = olItem
        With olEmail
            .Attachments.Add ("d:\temp\test.txt")
            .Save
        End With
    End If
Next

MsgBox ("done")
End Sub

请注意,这是最小的工作 - 失败 - 示例。我尝试了在互联网上找到的其他代码,但都显示出奇怪的行为。

标签: vbaoutlook

解决方案


@HackSlash 的建议也不起作用,但它引发了另一个想法:将修改分成两个循环,瞧,这行得通:

Sub addAttachmentsToMailsInOutbox()

Dim olNs As Outlook.NameSpace
Dim olOutbox As Outlook.MAPIFolder
Dim olItem As Object

Set olNs = GetNamespace("MAPI")
Set olOutbox = olNs.GetDefaultFolder(olFolderOutbox)

For Each olItem In olOutbox.Items
    If olItem.Class = olMail Then
        With olItem
            .BodyFormat = olFormatHTML
            .Save
        End With
    End If
Next

For Each olItem In olOutbox.Items
    If olItem.Class = olMail Then
        With olItem
            .Attachments.Add ("d:\temp\test.txt")
            .Save
        End With
    End If
Next

MsgBox ("done")
End Sub

如果需要附加多个文件,只需.Attachments.Add(....)为每个文件重复该行。


推荐阅读