質問
2019年6月4日火曜日 8:28
ExcelからVBAでoutlookを起動し、object.Displayでメールフォームを表示してメールを送信しましたが、送信トレイに入ったままで送信されません。
そこで少し調べて以下のサイトを見つけたのですが、
http://pineplanter.moo.jp/non-it-salaryman/2016/09/22/excel-vba-sendmail/
どうやらメールフォームだけだと送信トレイに入って送信されないみたいです。
Outlook自体がこういう仕様でどうにもならないのか、それとも何らかの解決法があるのか私にはわかりません。
現在は仕方がないのでoutlookはやめて、thunderbirdをコマンドラインで起動してメールを送信しています。
何らかの解決方法をご存知の方がいるのなら、よろしくおねがいします。
すべての返信 (5)
2019年6月4日火曜日 10:30
shin_0125さん、こんばんは。
ご呈示のサイトにあるとおり、Outlookアプリケーションの立ち上げは必要のようですよ。
ただし、MailItemオブジェクト.Send で、VBAから送信できるはずです。
次のURLのサイトをご参照ください。
https://tonari-it.com/excel-vba-outlook-mail-send/
そうではなくて、「MailItemオブジェクト.Send で送信したけれども送信トレイに入ったままで送信されない。」ということですと、小生には訳が分からないです。お力になれず、申し訳ないです。
2019年6月4日火曜日 15:05
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月5日水曜日 8:09
ありがとうございます。やっぱりメールフォームだけだと無理なんですね。
object.sendの方は問題なく送信できます。
仕方がないのでoutlookはやめて、thunderbirdを使うことにします。
ありがとうございました。
2019年6月5日水曜日 8:12
ありがとうございます。参考にさせていただきます。
ありがとうございました。
2019年6月5日水曜日 10:48
shin_0124さん、こんばんは。
ご返事、ありがとうございました。
Outlookアプリケーションの立ち上げは必要のようですが、Mailオブジェクト.Send でメールを送信後、Outlookアプリケーション.Quit だかでOutlookを終了して閉じてしまえば、Outlookアプリケーションのウィンドウが残らないので、気にならないような気がしますが(正しいコマンドは別途調べてください。)。問題意識の所在が異なるのであれば、参考になりませんが。