【Outlook VBA】メールの送信時イベントで確認ダイアログを表示する方法

 

outlook,vba,mail,cancel皆様こんにちは、ノグチです。

何度かの記事で、OutlookのVBAをご紹介してきました。

Outlook VBAも、色々便利なことができそうだなあ、と感じて頂けているのではないでしょうか。

メールって、簡単に送れてしまう反面、簡単に宛先をミスしたり、添付ファイルを付け忘れたりと簡単にミスしてしまうという面もあるんですよね。

「送信する前にチェックすればいいじゃない」

と思うんですが、人力でのチェックにも限界がありますし、完璧ではありません。

ならばせめて、メール送信ボタンを押したときに、チェックすべき個所をメッセージで表示できればいいのに…

それ、Outlook VBAならできるかもしれませんよ。

ということで今回は、Outlookの送信ボタンを押したとき、メッセージダイアログを表示させて、メッセージに対して「いいえ」が選択された場合に、メール送信をキャンセルする方法をご紹介します。

スポンサーリンク

メール送信のApplication_ItemSendイベント

Outlookに限った話ではありませんが、人間がボタンをクリックしたり、画面を閉じたり切り替えたりすることを、イベントと言います。

Outlookのメール作成ウインドウで送信ボタンを押すと、Application_ItemSendというイベントが実行されます。

試しに、送信ボタンを押して、VBEでデバッグしてみましょう。

はい、この通り。

イベント,send_mail,デバッグ

Application_ItemSendのイベントを通っていますよね。

メール送信ボタンを押したときに任意のメッセージを表示するには、このイベントにメッセージを表示するコードを差し込めばOKです。

Application_ItemSendイベントにコードを差し込んでいく

メール送信時にメッセージを表示してみる

これはとっても簡単。

Application_ItemSendイベントに、メッセージ表示のコードを差し込むだけです。
こんな感じ。

Private Sub Application_ItemSend(ByVal Item As Object, Cancel As Boolean)

MsgBox "宛先、添付ファイルはチェックしましたか?"

End Sub

これでメール送信ボタンを押すと…

outlook,vba,メール,送信ボタン,メッセージ表示

はい、この通りメール送信時にメッセージが表示されます。

イベントプロシージャの引数Cancelでイベントをキャンセルする

VBAのイベントプロシージャには、イベントをキャンセルするための引数Cancelがあります。

この引数CancelにTrueを指定することで、イベントの実行をキャンセルすることができるのです。

つまり、メール送信ボタンを押したときに実行されるイベントプロシージャApplication_ItemSend内でこの引数CanncelにTrueを指定することで、メール送信をキャンセルすることができるんです!

引数CancelにTrueを指定するには、イベントプロシージャの中で、このように記述します。

Cancel = True

そのまんまですね。

表示したメッセージの「はい/いいえ」でメールの送信をキャンセルするコード

さてさて、イベントプロシージャApplication_ItemSendと引数Cancelの使い方がわかれば、後は表示させるメッセージと、メッセージダイアログで「はい/いいえ」のどちらが選択されたかによる分岐を加えれば、やりたいこと達成です。

そして上でご紹介したイベントプロシージャApplication_ItemSendと引数Cancel、メッセージダイアログ表示方法を組み合わせると、こんなコードになります。

Private Sub Application_ItemSend(ByVal Item As Object, Cancel As Boolean)

If MsgBox("宛先、添付ファイルはチェックしましたか?" , vbYesNo) = vbNo Then
    Cancel = True
End If

End Sub

メール送信ボタンを押したとき、「メール送信しますか?」というメッセージを表示して、表示されるメッセージダイアログで「いいえ」が選択された場合、メール送信をキャンセルする、というコードです。

このコードを実行してみます。

「メール送信しますか?」のメッセージが表示された後、「いいえ」を選択した場合をデバッグしてみると、この通り、イベントプロシージャの引数Cancel = Trueのコードが実行されて…

outlook,vba,senditem,cancel

 

メール送信イベントがここで終了し、メール作成画面でメール送信ボタンを押したのに、メールが送信されずにメール作成画面が開いたままになります。

これで、イベントプロシージャの引数CancelにTrueを指定することで、メール送信をキャンセルさせることができました

最後に

今回は、メール送信ボタンを押したときにメッセージボックスを表示させて、メッセージダイアログで「いいえ」が選択された場合に、メール送信をキャンセルする方法をご紹介しました。

この方法を使えば、メール送信時に色々なメッセージを表示させたり、本文内の宛名と、メールに指定した宛先アドレスの名前が違う場合などのチェックに使えたりしそうですね。
それでは、最後までお読みいただきありがとうございました!

連載目次:Outlook VBAでメールを操作してみよう

メーラーとして名高く、そして便利なOutlook。

Outlookのメールだって、VBAで操作することができますよ。本シリーズでは、Outlookのメールを、VBAで操作する方法をご紹介していきます。

  1. 【Outlook VBA】メールの送信時イベントで確認ダイアログを表示する方法
  2. 【Outlook VBA】UnReadItemCountプロパティで受信フォルダの未読メール件数を取得する方法
  3. 【Outlook VBA】メール本文から欲しい情報だけを取り出す方法
  4. 【Outlook VBA】Application_NewMailExイベントでメール受信時にメッセージを表示する方法
タイトルとURLをコピーしました