【VBA】Outlookからメールを送付する

エクセルVBAでよく使うコードの備忘録。エクセルからOutlookメールを作成し送付するコード。 添付ファイルを付けてメールを送付する方法についてはこちらをご参照ください。

スポンサーリンク

参照設定

Outlookを操作するにはOutlookを操作するためのオブジェクトを作成する必要があります。作成する際のコードの書き方は参照設定を使う場合とそうでない場合で異なりますが(詳しくはこちらをご覧ください)、基本的には参照設定を使うことをお勧めします。

参照設定は以下のように、VBAのコードエディタから「ツール > 参照設定」と進み、「Microsoft Outlook XX.X Object Library」にチェックを入れることで設定できます(XX.X部分の数字はバージョンによって変わります)。

メールを表示して送付する

OutlookのメールをVBAから送付するには、まずOutlookを操作するためのオブジェクト(Outlook.Applicationオブジェクト)を作成します(VBAの書き方は参照設定がある場合とない場合とで異なります)。

Outlook.Applicationオブジェクトが作成できたら、次にそのオブジェクトに対してメール本体を示すMailItemオブジェクトを作成します(こちらも参照設定の有無で書き方が変わります)。作成したMailItemオブジェクトに対して、メールの送付アドレスや件名本文などを設定し、Displayメソッドを使用してメールを表示します。送付まで自動で行いたい場合は、さらにSendメソッドを使用します。

宛先などの設定は方法はメールを送付する際に手作業で設定するときの入力と基本的に同じように文字列を割り当てます。例えば複数のメールアドレスに送付する場合は、メールアドレスを「;」でつなぎます。「test1@test.com; test2@test.com」みたいな感じです。

下記では参照設定を利用する場合としない場合に分けてサンプルコードを記載します。サンプルコードでは作成するメールはテキスト形式にしてあります。HTMLなど他の書式でメールを作成したい場合にはマイクロソフトのこちらのページから、BodyFormatプロパティに設定する値を確認して適用してください。

なお、コードを使用する際はカッコに囲まれた部分([***])を自分のプログラムに合わせて変更してください。

参照設定を利用する場合

参照設定を利用する場合は、定数等を利用できるので可読性が高まります。

Public Sub SendMail1()
    
    '--- Outlook操作のオブジェクト ---'
    Dim objOutlook As Object
    Set objOutlook = New Outlook.Application
    
    '--- メールオブジェクト ---'
    Dim objMail As Object
    Set objMail = objOutlook.CreateItem(olMailItem)
        
    '--- メールの内容を格納する変数 ---'
    Dim toStr As String
    Dim ccStr As String
    Dim bccStr As String
    Dim subjectStr As String
    Dim bodyStr As String
    
    '--- 宛先の内容 ---'
    toStr = "[宛先のメールアドレス]"
    ccStr = "[CCのメールアドレス]"
    bccStr = "[BCCのメールアドレス]"
    
    '--- 件名の内容 ---'
    subjectStr = "[件名]"
    
    '--- 本文の内容 ---'
    bodyStr = "[本文]"
        
    '--- 条件を設定 ---'
    objMail.To = toStr
    objMail.CC = ccStr
    objMail.BCC = bccStr
    objMail.Subject = subjectStr
    objMail.BodyFormat = olFormatPlain 'テキスト形式
    objMail.Body = bodyStr
    
    '--- メールを表示 ---'
    objMail.Display
    
    '--- メールを送付 ---'
    objMail.Send
        
End Sub

参照設定を利用しない場合

参照設定を利用しない場合は、オブジェクトの生成など表記が少々煩雑になります。定数を利用できなくなるので、一部の設定にはパラメータとして数字を直接設定しなくてはなりません。

Public Sub SendMail2()
    
    '--- Outlook操作のオブジェクト ---'
    Dim objOutlook As Object
    Set objOutlook = CreateObject("Outlook.Application")
    
    '--- メールオブジェクト ---'
    Dim objMail As Object
    Set objMail = objOutlook.CreateItem(0)
        
    '--- メールの内容を格納する変数 ---'
    Dim toStr As String
    Dim ccStr As String
    Dim bccStr As String
    Dim subjectStr As String
    Dim bodyStr As String
    
    '--- 宛先の内容 ---'
    toStr = "[宛先のメールアドレス]"
    ccStr = "[CCのメールアドレス]"
    bccStr = "[BCCのメールアドレス]"
    
    '--- 件名の内容 ---'
    subjectStr = "[件名]"
    
    '--- 本文の内容 ---'
    bodyStr = "[本文]"
        
    '--- 条件を設定 ---'
    objMail.To = toStr
    objMail.CC = ccStr
    objMail.BCC = bccStr
    objMail.Subject = subjectStr
    objMail.BodyFormat = 1 'テキスト形式
    objMail.Body = bodyStr
    
    '--- メールを表示 ---'
    objMail.Display
    
    '--- メールを送付 ---'
    objMail.Send
        
End Sub