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.Display |
メールを表示させず送信する | objMail.Send |
下のダウンロードボタンからサンプルファイルがダウンロードできます。
上記のマクロ参考にしたいのですが
別のプログラムで取得したファイルを添付するにはどうしたらよいでしょうか?
別のプログラムが下記になります、これもネットで見つけた式ですが
下記はファイルを開くマクロですが、これを開くのではなく添付したいのですが分かりますでしょうか?
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個教えて下さい。
本文に色々と文字を入れるのですが、
その間の部分を一部赤文字にする事は可能ですか?
お疲れ様です。 ←黒文字
今日も晴天です ←黒文字
至急の案件です ←これを赤文字
それではこれにて ←黒文字
可能ですか?
すみませんできました。
ありがとうございました。