none
ExcelからVBAでoutlookを起動しメールを送信しようとしましたが、送信トレイに入ったままで送信されません。 RRS feed

  • 質問

  • ExcelからVBAでoutlookを起動し、object.Displayでメールフォームを表示してメールを送信しましたが、送信トレイに入ったままで送信されません。

    そこで少し調べて以下のサイトを見つけたのですが、

    http://pineplanter.moo.jp/non-it-salaryman/2016/09/22/excel-vba-sendmail/

    どうやらメールフォームだけだと送信トレイに入って送信されないみたいです。

    Outlook自体がこういう仕様でどうにもならないのか、それとも何らかの解決法があるのか私にはわかりません。

    現在は仕方がないのでoutlookはやめて、thunderbirdをコマンドラインで起動してメールを送信しています。

    何らかの解決方法をご存知の方がいるのなら、よろしくおねがいします。

    2019年6月4日 8:28

すべての返信

  • shin_0125さん、こんばんは。

    ご呈示のサイトにあるとおり、Outlookアプリケーションの立ち上げは必要のようですよ。
    ただし、MailItemオブジェクト.Send で、VBAから送信できるはずです。
    次のURLのサイトをご参照ください。
    https://tonari-it.com/excel-vba-outlook-mail-send/

    そうではなくて、「MailItemオブジェクト.Send で送信したけれども送信トレイに入ったままで送信されない。」ということですと、小生には訳が分からないです。お力になれず、申し訳ないです。

    2019年6月4日 10:30
  • Outlook のメールフォームを使わないでいいのなら以下のような感じで Excel のセルを
    メール作成のインターフェイスにしてしまうという手もあります。

    VBA ソースのサンプル

    Option Explicit
    
    Const olMailItem = 0
    
    ' テキスト形式
    Const olFormatPlain     As Long = 1
    ' HTML 形式
    Const olFormatHTML      As Long = 2
    ' リッチテキスト形式
    Const olFormatRichText  As Long = 3
    
    Sub test()
        Dim OlApp As Object ' Outlook.Application
        Dim olMi As Object ' Outlook.MailItem
    
        ' Outlook のオブジェクトを作成
        Set OlApp = CreateObject("Outlook.Application") ' New Outlook.Application
        ' Outlook メールアイテムを作成
        Set olMi = OlApp.CreateItem(olMailItem)
        ' 宛先 (最大 5 件まで対応)
        olMi.To = Application.WorksheetFunction.TextJoin(";", True, Range("b1:g1"))
        ' CC (最大 5 件まで対応)
        olMi.CC = Application.WorksheetFunction.TextJoin(";", True, Range("b2:g2"))
        ' BCC (最大 5 件まで対応)
        olMi.BCC = Application.WorksheetFunction.TextJoin(";", True, Range("b3:g3"))
        ' 件名
        olMi.Subject = Range("b4").Value
        ' 本文の書式をテキストにする
        olMi.BodyFormat = olFormatPlain
        ' 本文
        olMi.Body = Range("b5").Value
    
        ' 宛先、CC、BCC のいずれかが入力されているかをチェック
        Select Case True
        Case olMi.To = "" And olMi.CC = "" And olMi.BCC = ""
            MsgBox "送信先、CC、BCC いずれかは入力してください。", vbCritical
            Exit Sub
        End Select
    
        ' 件名入力チェック
        If olMi.Subject = "" Then
            If MsgBox("件名が入力されていません。" & vbCrLf & "送信してよろしいですか?", vbQuestion Or vbOKCancel Or vbDefaultButton2) = vbCancel Then
                Exit Sub
            End If
        End If
    
        ' 本文入力チェック
        If olMi.Body = "" Then
            If MsgBox("本文が入力されていません。" & vbCrLf & "送信してよろしいですか?", vbQuestion Or vbOKCancel Or vbDefaultButton2) = vbCancel Then
                Exit Sub
            End If
        End If
    
        ' 送信
        olMi.Send
    End Sub
    
    2019年6月4日 15:05
  • ありがとうございます。やっぱりメールフォームだけだと無理なんですね。

    object.sendの方は問題なく送信できます。

    仕方がないのでoutlookはやめて、thunderbirdを使うことにします。

    ありがとうございました。

    2019年6月5日 8:09
  • ありがとうございます。参考にさせていただきます。

    ありがとうございました。

    2019年6月5日 8:12
  • shin_0124さん、こんばんは。

    ご返事、ありがとうございました。

    Outlookアプリケーションの立ち上げは必要のようですが、Mailオブジェクト.Send でメールを送信後、Outlookアプリケーション.Quit だかでOutlookを終了して閉じてしまえば、Outlookアプリケーションのウィンドウが残らないので、気にならないような気がしますが(正しいコマンドは別途調べてください。)。問題意識の所在が異なるのであれば、参考になりませんが。

    2019年6月5日 10:48