1

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

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

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

在网上环顾四周,我找到并尝试了返回 false 的 Recipients.ResolveAll。我怀疑原因是 Outlook 试图一次解析整个收件人字符串,而不是单独解析。所以我的问题是:如何让 Outlook 停止显示此检查名称对话框?我是否需要遍历我的电子邮件字符串并解析出各个电子邮件?

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
4

1 回答 1

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

应该允许您添加整个列表

于 2012-10-22T21:12:44.500 回答