Outlook VBA 错误地回复文件夹中的电子邮件

Posted

技术标签:

【中文标题】Outlook VBA 错误地回复文件夹中的电子邮件【英文标题】:Outlook VBA Incorrectly Replying to Emails in Folder 【发布时间】:2017-06-13 08:46:30 【问题描述】:

正如本文Excel VBA for searching in mails of Outlook 所引用的,我稍微更改了代码以将所有电子邮件重新发送给“已发送邮件”文件夹中的同一收件人。

Function ReplyEmail()

    Dim olMail
    Dim olMails

    Set olApp = CreateObject("Outlook.Application")

    Set olNs = olApp.GetNamespace("MAPI")
    Set olFldr = olNs.GetDefaultFolder(olFolderSentMail)
    Set olMails = olFldr.Items

    For Each olMail In olMails

        olMail.ReplyAll
        olMail.Importance = 2
        olMail.Subject = "RE: 2ND " & olMail.Subject
        olMail.Send

    Next olMail

End Function

但是,由于某些奇怪的原因,此功能仅发送指定文件夹中所有电子邮件的 一半。如果有 9 封电子邮件,该函数会发出 5 封(剩下 4 封),然后如果我运行另一个迭代,该函数会发出 2 封,依此类推......

如果我将olMail.Send 更改为olMail.Display,则该函数会在弹出框中显示所有电子邮件。

有没有人遇到过这个问题或者知道是什么原因?

谢谢。

【问题讨论】:

也许您可以遍历 olmails 中电子邮件主题的名称,以查看其持有的内容 我将olMail.Send 替换为MsgBox (olMail.To) 并显示所有电子邮件。但是,只有当olMail.Send 行出现时才会出现此问题。如果我添加MsgBox (olMail.To) 之前 olMail.Send,那么只有**一半的**显示所有电子邮件的收件人。 【参考方案1】:

对于初学者,我不明白您为什么不使用从 ReplyAll 方法返回的 MailItem 对象来设置属性并在该对象上调用 .Send 而不是您的 olMail 变量表示的已发送项目的副本。

否则我怀疑项目的集合正在改变。将 For Each 更改为带有反向计数器循环的 For,这种奇怪现象应该会消失。

【讨论】:

非常感谢。我不知道 Mailitem.ReplyAll 返回一个新的 MailItem。现在我想起来了,你的第二句话也是有道理的。

以上是关于Outlook VBA 错误地回复文件夹中的电子邮件的主要内容,如果未能解决你的问题,请参考以下文章

Outlook 中的 VBA:“Microsoft Outlook 已停止工作”消息

如何使用 VBA 识别 MS Outlook 中的日历条目?

使用 Access VBA 从 Outlook 获取附件

显示高级搜索项目而不保存在文件夹中 Outlook vba

使用电子邮件 Outlook 中的链接触发 VBA 代码

VBA 使用多标准从 Outlook 下载电子邮件附件