1

下書きメールを作成および保存する VBA スクリプトがあります。受信者を追加するには、リンクされた Excel テーブルから文字列を取得し、それを受信者オブジェクトに追加します。

受信者が 1 人の電子メールの場合、これは非常に効果的です。ユーザーが行う必要があるのは、下書きを開いて 5 秒間確認し、[送信] をクリックすることだけです。

この問題は、一度に複数の連絡先 (例: "a@aol.com; b@aol.com; c@aol.com") で発生します。ユーザーが [送信] をクリックすると、Outlook は [名前の確認] ダイアログをポップアップし、提案はありません。ユーザーは、[宛先] フィールドをクリックし、ダミーのセミコロンを入力して自動解決をトリガーすることで、これを回避できます。このプロセスでは一度に 100 通以上のメールが作成され、個別に確認する必要があるため、これは避けたいと思います。

ネットで調べてみると、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 に答える