[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『VBA outlookメールへのファイルの添付』(みみ)
久しぶりにお世話になります。
outlookメール作成について下記のコードで動かしたところ
メールへのファイルの添付がうまくいきません。
(メールへの添付以外は上手くいきます。)
メールは作成されて宛先、本文等は入力されているものの
添付したいエクセルファイルは添付されず。
なお、エラーメッセージは出ないような状態です。
ヘルプお願いします!!
Sub sendmail()
'---コード1|outlookを起動する
Dim toaddress, ccaddress, bccaddress As String '変数設定:To宛先、cc宛先、bcc宛先
Dim subject, mailBody, credit As String '変数設定:件名、メール本文、クレジット、添付
Dim OutlookObj As Outlook.Application 'Outlookで使用するオブジェクト生成
Dim mailItemObj As Outlook.MailItem 'Outlookで使用するオブジェクト生成
'---コード2|差出人、本文、署名を取得する---
toaddress = Range("B2").Value 'To宛先
ccaddress = Range("B3").Value 'cc宛先
bccaddress = Range("B4").Value 'bcc宛先
subject = Range("B5").Value '件名
mailBody = Range("B6").Value 'メール本文
credit = Range("B7").Value 'クレジット
'---コード3|メールを作成して、差出人、本文、署名を入れ込む---
Set OutlookObj = CreateObject("Outlook.Application")
Set mailItemObj = OutlookObj.CreateItem(olMailItem)
mailItemObj.BodyFormat = 3 'リッチテキストに変更
mailItemObj.To = toaddress 'to宛先をセット
mailItemObj.CC = ccaddress 'cc宛先をセット
mailItemObj.BCC = bccaddress 'bcc宛先をセット
mailItemObj.subject = subject '件名をセット
'---コード4|メール本文を改行する
With mailItemObj.GetInspector.WordEditor.Windows(1).Selection
.TypeText mailBody 'メール本文 改行 クレジット
.TypeText Chr(13)
Worksheets(1).Range("C9:F11").Copy
.Paste
.TypeText Chr(13)
.TypeText credit
End With
Application.CutCopyMode = False
'---コード5|自動で添付ファイルを付ける---
Dim attached As String
Dim myattachments As Outlook.Attachments 'Outlookで使用するオブジェクト生成
Set myattachments = mailItemObj.Attachments
attached = Range("B8").Value '添付ファイル
myattachments.Add attached
'---コード6|メールを送信する---
'mailItemObj.Save '下書き保存
mailItemObj.Display 'メール表示(ここでは誤送信を防ぐために表示だけにして、メール送信はしない)
'---コード7|outlookを閉じる(オブジェクトの解放)---
Set OutlookObj = Nothing
Set mailItemObj = Nothing
End Sub
< 使用 Excel:unknown、使用 OS:unknown >
Range("B8").Value
↑にフルパスではなく、ファイル名が入っていたというオチはないですか?
(もこな2) 2019/06/05(水) 23:29
Sub メール作成まくろ()
Dim MySH As Worksheet
Set MySH = ActiveSheet
Stop 'ブレークポイントの代わり
With CreateObject("Outlook.Application")
With .CreateItem(olMailItem)
.BodyFormat = 3 'リッチテキストに変更
.To = MySH.Range("B2").Value 'To宛先
.CC = MySH.Range("B3").Value 'cc宛先
.BCC = MySH.Range("B4").Value 'bcc宛先
.subject = MySH.Range("B5").Value '件名
With .GetInspector.WordEditor.Windows(1).Selection
.TypeText MySH.Range("B6").Value 'メール本文
.TypeText Chr(13) '改行コード
Worksheets(1).Range("C9:F11").Copy '表をメールにコピペ
.Paste
.TypeText Chr(13) '改行コード
.TypeText MySH.Range("B7").Value 'クレジット
End With
.Attachments.Add MySH.Range("B8").Value '←添付ファイルはフルパスになるように記載
.Display
End With
End With
End With
※未テストです 注意!!
上記がちゃんと動くかはともかく、全体的に変数に格納せずそのままoutlookオブジェクトに値を渡してあげるように改造すれば短めのコードになり、デバッグ作業がしやすそうな気がします。
(もこな2) 2019/06/06(木) 02:27
ミスっていたEnd WithをEnd Sub に修正して実行しても、添付ファイルが付いたように見えなかったので調べてみたところ↓がヒットしました。
https://docs.microsoft.com/ja-jp/office/vba/api/outlook.attachments.add
↑によるとリッチテキストの場合、Attachmentsメソッドの引数Positionに0を指定すると、添付ファイルが非表示になる仕様のようです。
なので、確証はありませんが
Set myattachments = mailItemObj.Attachments
attached = Range("B8").Value '添付ファイル
この部分で添付ファイルは添付されていたけど、Positionを指定しないから0を指定したと見なされ非表示になっていたということではないでしょうか?
踏まえて、私が投稿したコードを修正。
Sub メール作成まくろ()
Dim MySH As Worksheet
Set MySH = ActiveSheet
Stop 'ブレークポイントの代わり
With CreateObject("Outlook.Application")
With .CreateItem(olMailItem)
.BodyFormat = 3 'リッチテキストに変更
.To = MySH.Range("B2").Value 'To宛先
.CC = MySH.Range("B3").Value 'cc宛先
.BCC = MySH.Range("B4").Value 'bcc宛先
.Subject = MySH.Range("B5").Value '件名
With .GetInspector.WordEditor.Windows(1).Selection
.TypeText MySH.Range("B6").Value 'メール本文
.TypeText Chr(13) '改行コード
Worksheets(1).Range("C9:F11").Copy '表をメールにコピペ
.Paste
.TypeText Chr(13) '改行コード
.TypeText MySH.Range("B7").Value 'クレジット
End With
'▼添付ファイルはフルパスになるように記載
' リッチテキスト形式なので[Position]を省略(0に)すると非表示になる?
.Attachments.Add _
MySH.Range("B8").Value, olByValue, 1, ""
.Display
End With
End With
End Sub
↑のコードをExcel2016・Outlook2016/Windows10の環境でテストしてみましたが、正常に動いているようですので、参考にシェアします。
※なお、個人的には本文中に添付ファイルがあると邪魔なので「漢は黙ってテキスト形式」を推してます。
(もこな2) 2019/06/06(木) 14:10
ちょっとした検査入院のはずが、がっつり入院生活を強いられてまして・・・。
もこな2さんありがとうございます。
一番下のコードでメールへの添付は、できるようになりました。
ただ、添付ファイルの位置が、
本文の一番トップに添付される(リッチテキスト故)の為
ビジネスメールの形式としては見栄えがあまり良くない感じなんです。
本文または、著名の下に配置する方法ってありますでしょうか。
(みみ) 2019/06/11(火) 22:25
_Position_パラメーターの値に1を指定すると、添付ファイルはメッセージ本文の先頭に配置されます。 電子メールアイテムの本文の文字数より大きい値 ' n ' は、添付ファイルを末尾に配置することを指定します
ただ、署名の下にアイコンあったらダサいと思うので、改行コード含めて本文の文字数を数えておき、本文と署名の間に配置したほうが良さそうな気がします。
まあ、テキスト形式推奨派の私の場合、意味なしにhtml形式で送られたら舌打ち、リッチテキスト形式で送られたら使えない奴扱いしがちなので、取引先に私みたいな変り者がいないことをお祈りするばかりです。
(もこな2) 2019/06/12(水) 09:08
文字数を数えて間に配置したほうがよさそうですね。
客先の指示だからしかたないねー
客先に言われなきゃやらんよ
曰く・・・
忙しいから、添付はよほどのことがないと見ねーんだ、
わかりやすく本文に重要な部分だけ表でのせろ。
ただ、見るときもあるから添付はつけろだからね。
大人は大耳
(みみ) 2019/06/12(水) 22:20
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.