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 已停止工作”消息