【Outlook VBA】指定時間にメールを自動送信する方法!タスクスケジューラや予定表から実行!

Outlookで指定時刻になったらメールを自動送信したいときはないでしょうか。

たとえば、日報など毎日同じタイミングで出すメールを自動で作成/送信したい時などです。

けど、そんな中で悩むことは、

・Outlookで指定時刻になったらマクロを実行する方法がわからない。
・VBAでOutlookメールを作成/送信したいが方法がわからない。

ですよね。

今回はそんなお悩みを解決する

・Outlookで指定時刻になったらマクロを実行する方法2選!
・VBAでOutlookメールを作成/送信する方法

についてまとめます!

指定時間にメールを自動送信するイメージ

指定時間にメールを自動送信するイメージについて説明をします。

まず、Outlook VBA内にメールの件名や本文、宛先などを入力します。

.Subject = "業務日報" '件名を指定します。
'本文を指定します。
.Body = "宛先各位" & vbCrLf _
& "本日の業務内容について以下の通り報告いたします。" & vbCrLf & vbCrLf _
& "9:00:朝礼" & vbCrLf _
& "10:00:商品納品" & vbCrLf _
& "13:00:定例会" & vbCrLf _
& "15:00:定期作業" & vbCrLf _
& "17:00:日報作成" & vbCrLf & vbCrLf _
& "以上/A部タカヒロ"

Outlook側へVBAを実装します。

次に実装したVBAを定期的に実行していくようスケジューリングします。

スケジュール設定を行う箇所はOutlook予定表、

またはWindowsのタスクスケジューラの2つとなります。

それぞれスケジュールを設定し、指定時刻にメールが作成/送信されるかを確認していきます。

日常繰り返しているメール作成/送信作業が自動化できると便利ですね。

それでは早速やってみましょう!

Outlookメールを作成/送信するVBA

VBAの準備

Outlookメールを作成/送信するVBAの実装方法について説明をします。

今回のサンプルコードは以下の通りです。

タカヒロ
タカヒロ
このコードは前回の記事、
【Outlook VBA】メールを作成/送信する方法!Excelデータから作成も!」を抜粋したものです。

Sub Outlookのメールを新規作成する()

    'Outlook用の定義
    Dim objMail As Object

    If MsgBox("Outlookメールを作成しますか?", vbYesNo + vbQuestion, "確認") = vbYes Then
            
        Set objMail = CreateItem(olMailItem)
        
        With objMail
            
            .BodyFormat = 3 ' 「3」の場合リッチテキスト型となります。「1」はテキスト型、「2」は HTML型となります。
            .Subject = "業務日報" '件名を指定します。
            '本文を指定します。
            .Body = "宛先各位" & vbCrLf _
                    & "本日の業務内容について以下の通り報告いたします。" & vbCrLf & vbCrLf _
                    & "9:00:朝礼" & vbCrLf _
                    & "10:00:商品納品" & vbCrLf _
                    & "13:00:定例会" & vbCrLf _
                    & "15:00:定期作業" & vbCrLf _
                    & "17:00:日報作成" & vbCrLf & vbCrLf _
                    & "以上/A部タカヒロ"
        
            .To = "user1@extan.jp" 'Toを指定します。
            .CC = "user2@extan.jp" 'CCを指定します。
            
            .Display 'メールを表示します。
            '.Send  'メールを送信します。
        
        End With

    Else
        MsgBox "処理を中断します。"
    End If
    
    'オブジェクトを解放します。
    Set objMail = Nothing

    MsgBox "Outlookメールの作成/送信が完了しました!", vbInformation
    
End Sub

VBAの設定

VBAの設定箇所は以下の通りです。

「3」の場合リッチテキスト型となります。「1」はテキスト型、「2」は HTML型となります。

.BodyFormat = 3

件名を指定します。

.Subject = "業務日報(2021年12月10日)"

本文を指定します。改行は「vbCrLf」で指定して、文字列を&で結合するようにしてください。

.Body = "宛先各位" & vbCrLf _
& "本日の業務内容について以下の通り報告いたします。" & vbCrLf & vbCrLf _
& "9:00:朝礼" & vbCrLf _
& "10:00:商品納品" & vbCrLf _
& "13:00:定例会" & vbCrLf _
& "15:00:定期作業" & vbCrLf _
& "17:00:日報作成" & vbCrLf & vbCrLf _
& "以上/A部タカヒロ"

Toを指定します。

.To = "user1@extan.jp"

CCを指定します。

.CC = "user2@extan.jp"

VBAの実装手順

実装手順は以下の通りです。

「開発」タブ>「Visual Basic」を押します。

「Visual Basic Editor」にて、[Project1] > [Microsoft Outlook Objects] の ThisOutlookSessionをダブルクリックします。

右ペインのコードエリアへ、VBAコードを貼り付けて保存します。

こちらで完了です。

VBAの実行

VBAを実行してみましょう。

まずはメールが作成されるか確認をします。

「”Outlookメールの作成/送信が完了しました!”」と表示されたら完了です。

作成されたメールを確認してみましょう。

はい、件名、宛先、本文に指定した値が挿入されていますね!

つづいて送信をしてみましょう。

.Send

の湖面をアウトを外し、Sendメソッドを有効化します。

実行してみましょう。

はい、送信されていますね!

つづいて、このVBAを指定時間に起動するようスケジュール登録をしていきましょう。

タスクスケジューラで指定時間にOutlook VBAを起動する

タスクスケジューラで指定時間にOutlook VBAを起動する方法について説明をします。

タスクスケジューラから直接OutlookのVBAを実行することはできませんので、コマンド実行できるバッチファイルを用意して

そこからOutlookのVBAを起動するようにします。

Outlook VBAを起動するバッチファイルを用意する

Outlook VBAを起動するバッチファイルを用意しましょう。

メモ帳などのテキストエディタで以下を入力します。

start outlook.exe /autorun <実行したいマクロ名を指定>

サンプルではマクロの名前は上記プロシージャ名の「Outlookのメールを新規作成する」とします。

拡張子を「.bat」にして任意の名前で保存します。

タスクスケジューラにタスクを登録する

タスクスケジューラにタスクを登録して、先ほど作成したバッチファイルを起動するようにしましょう。

検索欄に「タスクスケジューラ」と入力し、タスクスケジューラを起動します。

右ペインの基本タスクの作成をクリックします。

基本タスクの作成で名前の欄に任意の値を入力します。

トリガーでは起動したいスケジュールを登録します。

操作ではプログラムの開始を選択し、先ほど作成したバッチファイルを選択します。

これで設定完了です。

タスクスケジューラからOutlook VBAを実行する

タスクスケジューラからOutlook VBAを実行できるか確認をしましょう。

登録したタスクを右クリックし、「実行する」を選択します。

はい、Outlook VBAが実行されメールが作成/送信されましたね。

あとは、スケジュール通り実行されているか確認をしましょう。

タカヒロ
タカヒロ
タスクスケジューラから実行する際は、Outlookアプリケーションが立ち上がった状態ではマクロは実行されない場合がありまので、Outlookアプリケーションを完全に落とした状態からおこなうようお願いします。

Outlook予定表から指定時間にOutlook VBAを起動する

Outlook予定表から指定時間にOutlook VBAを起動する方法について説明をします。

タスクスケジューラから実行する際はOutlookアプリケーション自体の起動となりますが、Outlook予定表ではOutlookアプリケーションを起動させた状態で定期実行できます。

タカヒロ
タカヒロ
予定表からVBAを実行する方法はOutllook本体を落とさなくてよいのでメール業務をしながら平行してVBAを実行できることができます。

予定を登録する

まずはOutlook予定へOutlook VBAを実行する予定を登録しましょう。

件名はサンプルでは「メールの作成と送信」としていますが任意の名前をつけても問題ありません。
アラームを0分に指定します。

アラームを拾うVBAを実装する

つづいて特定のアラームを拾うVBAをOutlookへ登録します。

Outlookの開発タブからVisual Basicを起動し、左ペインのThisOutlookSessionをダブルクリックします。

右ペインのウインドウに以下を入力します。

Private Sub Application_Reminder(ByVal objItem As Object)
    Dim strItemSubject As String
    
    ‘予定アイテムの件名を指定します。
    strItemSubject = "<予定アイテムの件名を指定>"
    
    ‘予定アイテムの件名とアイテムのオブジェクトクラスが”olAppointment”(26番)だった場合の条件を設定します。
    ‘オブジェクトクラスの詳細は以下を参照してください。
    ‘https://docs.microsoft.com/ja-jp/office/vba/api/outlook.olobjectclass
    
    If objItem.Subject = strItemSubject And objItem.Class = "26" Then
    
        ‘起動したいプロシージャを指定します。
        Call  <起動したいマクロ名を指定>
    End If
End Sub

VBAを設定する

VBAの入力ができたら、次にVBAの設定を行っていきます。

先ほど登録した予定の件名「メールの作成と送信」を<予定アイテムの件名を指定>へ入力します。

strItemSubject = "<予定アイテムの件名を指定>"

起動したいプロシージャを指定します。

Call <起動したいマクロ名を指定>

サンプルでは「Outlookのメールを新規作成する」としています。

これで設定は完了です。

Outlook予定表から指定時間にOutlook VBAを起動

Outlook予定表から指定時間にOutlook VBAが起動されるか確認をしましょう。

はい、こちらも問題なくOutlook VBAが起動され、メール作成と送信ができていますね!

 

さいごに

いかがでしょうか。

今回は、

・Outlookで指定時刻になったらマクロを実行する方法2選!
・VBAでOutlookメールを作成/送信する方法

についてまとめました。

また、他にも便利な方法がありますので、よろしければご参照頂ければと思います。



この記事の関連キーワード

こちらの記事の関連キーワード一覧です。クリックするとキーワードに関連する記事一覧が閲覧できます。



タカヒロ

タカヒロ
実質無料で読めるExcelVBA本についてまとめました。
もしVBA本購入を検討されていたら、どれだけお得か確かめてみてください。

【¥0】実質無料のExcelVBAおすすめ本25選!初級~中級まで網羅!

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です