自动生成电子邮件,无法解析多个收件人

时间:2012-10-22 20:51:16

标签: vba outlook access-vba outlook-2007

我有一个创建&的VBA脚本保存草稿电子邮件。要添加收件人,它会从链接的Excel表中提取一个字符串,然后将其添加到“收件人”对象中。

对于包含单个收件人的电子邮件,这就像魅力一样。所有用户需要做的就是打开草稿,花5秒钟查看,然后点击发送。

多个联系人同时出现问题(例如“a@aol.com; b@aol.com; c@aol.com”)。当用户点击发送时,Outlook将弹出一个检查名称对话框,没有任何建议。用户可以通过单击“收件人”字段并输入虚拟分号来触发自动解析来解决此问题。我想避免这种情况,因为这个过程一次创建了超过一百封电子邮件,需要单独审核。

环顾四周,我发现并尝试了Recipients.ResolveAll,返回false。我怀疑原因是Outlook正在尝试立即解决整个收件人字符串而不是单独解决。所以我的问题是:如何让Outlook停止显示此Check Names对话框?我是否需要通过我的电子邮件字符串循环并解析各个电子邮件?

Sub CreateEmail(id as Integer)
    Dim OlApp As Outlook.Application
    Dim ObjMail As Outlook.MailItem
    Dim Recipients As Outlook.Recipients
    Dim CurrentRecipient As Outlook.Recipient

    Set OlApp = CreateObject("Outlook.Application")
    Set ObjMail = OlApp.CreateItem(olMailItem)
    Set Recipients = ObjMail.Recipients

    Dim StrEmailTo As String
    StrEmailTo = CurrentDb.OpenRecordset( _
        "Select [Emails] from LU_Contacts where id=" & id & ";").Fields(0)

    Set CurrentRecipient = Recipients.Add(StrConv(StrEmailTo, 3))
    CurrentRecipient.Type = olTo
    ...

    Objmail.Save

1 个答案:

答案 0 :(得分:3)

Recipients.Add只需一个电子邮件地址。

如果您希望拥有多个收件人,请为每个收件人致电Recipients.Add

如果您的字符串以;分隔格式返回,则类似于:

dim EmailList as variant
dim NumEmails as long
dim AddEmailLoop as long

EmailList=split(StrEmailTo,";")
NumEmails=UBound(EmailList)

For AddEmailLoop=0 to NumEmails
    Recipients.add(EmailList(AddEmailLoop))
next

应该允许你添加整个列表