[[20190605200449]] 『VBA outlookメールへのファイルの添付』(みみ) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『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


家PCにoutlookが入ってないのでテストはしてませんが、以前、↓で似たようなコードを投稿したので適当に整理してみました。
[[20190314183159]] 『マクロで作成したOutlookメールに、Excelの表を貼』(あき)

    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


投稿したコードをoutlookが使える環境で試してみました。

ミスっていた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.