【VBA Outlook】添付ファイル付きメールを自動で作成する方法

【ExcelVBA】添付ファイル付きメールを自動で作成する

Excel VBAでOutlookのメールを添付ファイル付きで自動作成する方法を解説します。

実際のコード

早速ですが実際のコードはこちら。

VBA
Sub mail_create()
    
'--- Outlook操作のオブジェクト ---
    Dim objOutlook As Object
    Set objOutlook = New Outlook.Application
    
'--- メールオブジェクト ---
    Dim objMail As Object
    Set objMail = objOutlook.CreateItem(olMailItem)
        
'--- メールの内容を格納する変数 ---
    Dim toStr As String 'to(宛先)
    Dim ccStr As String  'cc(ccの宛先)
    Dim bccStr As String  'bcc(bccの宛先)
    Dim subjectStr As String 'メールの件名
    Dim bodyStr As String  'メールの本文
    Dim attachmentPath As String  '添付ファイルのパス


'---Excelから情報取得---
'セルは適当に入れています。Excel内にある場合は実際のセルに設定してください。
        toStr = Range("A1").Value
        ccStr = Range("A2").Value
        bccStr = Range("A3").Value
        subjectStr = Range("A4").Value
        attachmentPath = Range("A5").Value
      
  
'--- メールの内容をセット ---
'上のセルから取得もできますが、コードに書き込んでも可能です。
'どちらか一方を使ってください。
    'to宛先をセット
    toStr = "abc@gmail.com"
    
    'ccをセット
    ccStr = "abc@gmail.com"
    
    'Bccをセット
    'bccStr = "abc@gmail.com"
    
    '--- 件名の内容 ---
    subjectStr = "メールの件名を入力します。"
    
    '--- 本文の内容 ---
    bodyStr = "本文を入力します。"
        
'--- メールを作成 ---
    objMail.To = toStr
    objMail.CC = ccStr
    objMail.BCC = bccStr
    objMail.Subject = subjectStr
    objMail.BodyFormat = olFormatPlain 'メールをテキスト形式に設定
    objMail.Body = bodyStr

 '添付ファイルパスが空白の場合にスルーする
    If attachmentPath = "" Then
    
    Else
     objMail.Attachments.Add (attachmentPath)
    End If
   
    
'--- メールを表示 ---
    objMail.Display
    
'--- メールを送付 ---
    'objMail.Send
        
End Sub

解説

参照設定

参照設定にはこちらを必ず入れてください。

  • ”Microsoft Outlook 16.0 Object Library”

添付ファイルのパス

添付ファイルのパスはフルパスで指定してください。

メールの形式

メールをテキスト形式やHTML形式などが設定できます。本文をHTMLで作成する場合などはHTMLにしておきましょう。

また、企業のセキュリティポリシーなどで、HTMLメールでの送信が禁止されている場合もあります。そうした場合には、テキスト形式などへ設定しておきましょう。

内容コード
HTML形式objMail.BodyFormat = olFormatHTML
テキスト形式objMail.BodyFormat = olFormatPlain
リッチテキスト形式objMail.BodyFormat = olFormatRichText
形式の指定なしobjMail.BodyFormat = olFormatUnspecified

メールの表示と送信

メールを作成した後に、送信をさせるかどうかを設定できます。

メールを表示させずに送信する場合は”objMail.Send”を使いますが、作成されたメールを送信前に確認することができません。最初の1つ目などは誤送信を防いだり誤字のチェックなどのために、”objMail.Display”で一度作成して内容を確認することをおすすめします。

内容コード
メールを送信せず表示させるobjMail.Display
メールを表示させず送信するobjMail.Send

サンプルファイル

下のダウンロードボタンからサンプルファイルがダウンロードできます。

参考

5 COMMENTS

風来坊

上記のマクロ参考にしたいのですが
別のプログラムで取得したファイルを添付するにはどうしたらよいでしょうか?

別のプログラムが下記になります、これもネットで見つけた式ですが
下記はファイルを開くマクロですが、これを開くのではなく添付したいのですが分かりますでしょうか?

Sub ファイル()

Dim FileTime As Date
Dim MaxTime As Date
Dim FileName As String
Dim MaxFileName As String

With CreateObject(“WScript.Shell”) ‘カレントフォルダを指定

.CurrentDirectory = “D:実績”

End With

FileName = Dir(“横もち依頼*.xlsx”) ‘ワイルドカードで拡張子「xlsx」ファイルを取得

Do While FileName “” ‘ファイルを取得出来なくなるまでループ

FileTime = FileDateTime(FileName) ‘取得したファイルの日時を取得

If FileTime > MaxTime Then ‘時間を比較

MaxTime = FileTime ‘日付が大きい場合は格納
MaxFileName = FileName ‘日付が大きい場合はファイル名を格納

End If

FileName = Dir()

Loop

Workbooks.Open MaxFileName ‘最終的に最新日時のファイルを開く

End Sub

返信する
ふー

コメントありがとうございます。

添付ファイルはファイルへのフルパスを利用しますので、そのフルパスを取得する必要があります。
ファイル名は取得できているようですので、フォルダーのパスを結合させ、添付ファイルのパスとして利用します。

若干コードを作り替えていますが、下記でどうでしょう。

Sub mail_create()

‘— Outlook操作のオブジェクト —
Dim objOutlook As Object
Set objOutlook = New Outlook.Application

‘— メールオブジェクト —
Dim objMail As Object
Set objMail = objOutlook.CreateItem(olMailItem)

‘— メールの内容を格納する変数 —
Dim toStr As String ‘to(宛先)
Dim ccStr As String ‘cc(ccの宛先)
Dim bccStr As String ‘bcc(bccの宛先)
Dim subjectStr As String ‘メールの件名
Dim bodyStr As String ‘メールの本文
Dim attachmentPath As String ‘添付ファイルのパス

‘— ファイル取得の変数 —
Dim FileTime As Date
Dim MaxTime As Date
Dim FileName As String
Dim MaxFileName As String
Dim FolderPath As String ‘ フォルダのパスを格納する変数を追加

‘FolderPath = “D:\実績\” ‘ フォルダのパスを指定

FileName = Dir(FolderPath & “横もち依頼*.xlsx”) ‘ フルパスでのファイル取得

Do While FileName <> “” ‘ ファイルを取得できる間ループ

FileTime = FileDateTime(FolderPath & FileName) ‘ ファイルの日時を取得

If FileTime > MaxTime Then ‘ 時間を比較
MaxTime = FileTime ‘ 日付が大きい場合は格納
MaxFileName = FileName ‘ 日付が大きい場合はファイル名を格納
End If

FileName = Dir()

Loop

‘—Excelから情報取得—
‘セルは適当に入れています。Excel内にある場合は実際のセルに設定してください。
toStr = Range(“A1”).Value
ccStr = Range(“A2”).Value
bccStr = Range(“A3”).Value
subjectStr = Range(“A4”).Value
attachmentPath = FolderPath & MaxFileName ’ 取得したファイルパスを利用

‘— メールの内容をセット —
‘上のセルから取得もできますが、コードに書き込んでも可能です。
‘どちらか一方を使ってください。
‘to宛先をセット
toStr = “abc@gmail.com”

‘ccをセット
ccStr = “abc@gmail.com”

‘Bccをセット
‘bccStr = “abc@gmail.com”

‘— 件名の内容 —
subjectStr = “メールの件名を入力します。”

‘— 本文の内容 —
bodyStr = “本文を入力します。”

‘— メールを作成 —
objMail.To = toStr
objMail.CC = ccStr
objMail.BCC = bccStr
objMail.Subject = subjectStr
objMail.BodyFormat = olFormatPlain ‘メールをテキスト形式に設定
objMail.Body = bodyStr

‘添付ファイルパスが空白の場合にスルーする
If attachmentPath = “” Then

Else
objMail.Attachments.Add (attachmentPath)
End If

‘— メールを表示 —
objMail.Display

‘— メールを送付 —
‘objMail.Send

End Sub

返信する
風来坊

対応頂いてありがとうございます
完璧です
完全に求めて居た状態になりました

感謝感激です。

返信する
風来坊

1個教えて下さい。

本文に色々と文字を入れるのですが、
その間の部分を一部赤文字にする事は可能ですか?

お疲れ様です。  ←黒文字
今日も晴天です  ←黒文字
至急の案件です  ←これを赤文字
それではこれにて ←黒文字
可能ですか?

返信する

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

CAPTCHA