【VBA】Outlookから添付ファイルを付けてメールを送付する | あじゅWeb

【VBA】Outlookから添付ファイルを付けてメールを送付する

エクセルVBAでよく使うコードの備忘録。エクセルからOutlookメールを作成し添付ファイルを付けて送付するコード

スポンサーリンク

参照設定

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

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

添付ファイルを付けてメールを送付する

単純にメールを送る際のコードと比べても、添付ファイルを付ける場合で増える部分は多くありません。メールに添付ファイルを付与するには、添付ファイルのパスを引数として、Outlookメールを表すMailItemオブジェクトのAttachmentsオブジェクトに対してAddメソッドを利用します。単純にメールを送る際のコード(詳細はこちらを参照) と比較して増えているのは次の部分だけです。

'--- 添付ファイルのパス ---'
Dim attachmentPath As String
attachmentPath = "[添付ファイルのパス]"
    
'--- 添付ファイルを設定 ---'
Call objMail.Attachments.Add(attachmentPath)

下記では参照設定を利用する場合としない場合に分けてサンプルコードを記載します。

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

参照設定を利用する場合

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
    
    '--- 添付ファイルのパス ---'
    Dim attachmentPath As String
    attachmentPath = "[添付ファイルのパス]"
    
    '--- 添付ファイルを設定 ---'
    Call objMail.Attachments.Add(attachmentPath)
    
    '--- メールを表示 ---'
    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 = olFormatPlain
    objMail.Body = bodyStr
    
    '--- 添付ファイルのパス ---'
    Dim attachmentPath As String
    attachmentPath = "[添付ファイルのパス]"
    
    '--- 添付ファイルを設定 ---'
    Call objMail.Attachments.Add(attachmentPath)
    
    '--- メールを表示 ---'
    objMail.Display
    
    '--- メールを送付 ---'
    objMail.Send
        
End Sub