【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メールを作成/送信する方法

についてまとめました。

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



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

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








7 件のコメント

  • 初めまして。
    こちらの記事を参考にアラームを拾うVBAを実装したのですが、初回は無事メールが届いたのですが、それ以降、スケジュールに予定を入れアラームが鳴っても、メールが作成・送信されませんでした。
    解決策はございますでしょうか。

    • いつもご利用ありがとうございます。

      アラームが鳴ってもメールが送信されない件ですが、
      ThisOutlookSessionにコードがあるか、
      Private Sub Application_Reminder(ByVal objItem As Object)となっているか、
      またマクロの設定で「すべてのマクロを有効にする」にチェックがあるか
      ご確認いただけますでしょうか。

      また本ページのコードを使用している場合、
      予定アイテムの件名とアイテムのオブジェクトクラスが”olAppointment”(26番)だった場合にマクロが起動されるようにしておりますので、それぞれの条件が合致しているか
      また起動されるマクロにエラーがないか検証いただきたくお願いいたします。

  • タスクスケジューラのバッチファイルについて質問です。

    上記記載の通りやってみたのですが、バッチファイルを起動した際、Outlookは起動するものの、VBAの処理がされませんでした。

    普通にOutlook上でのVBA処理は可能です。

    何か解決方法はございますでしょうか?

    • いつもご利用ありがとうございます。

      タスクスケジューラでOutlookは起動するがVBAの処理がされない件につきまして、
      マクロの設定で制限がある選択をしていると実行できない場合がありますので、
      Outlookのオプション>トラストセンター>マクロの設定より
      「すべてのマクロを有効にする」にチェックがあるか確認いただき、
      ない場合はこちらをチェックした上、実行いただけますでしょうか。

  • 上記を参考に、VBAを搭載しましたがOutlookの予定時刻がきても
    マクロが起動しませんでした。

    なにか、間違っておりますでしょうか?
    —————————————————————————
    Private Sub Application_Reminder1(ByVal objItem As Object)
    Dim strItemSubject1 As String

    ‘予定アイテムの件名を指定します。
    strItemSubject1 = “自動配信メール”

    ‘予定アイテムの件名とアイテムのオブジェクトクラスが”olAppointment”(26番)だった場合の条件を設定します。
    ‘オブジェクトクラスの詳細は以下を参照してください。
    ‘https://docs.microsoft.com/ja-jp/office/vba/api/outlook.olobjectclass

    If objItem.Subject = strItemSubject1 And objItem.Class = “olAppointment” Then

    ‘起動したいプロシージャを指定します。
    Call 自動配信
    End If
    End Sub

    Private Sub 自動配信()
    ‘ プロシージャの内容を記述します。
    End Sub

    • いつもご利用ありがとうございます。

      マクロが自動起動できない件ですが、ご提示いただいたコードの以下の箇所を修正し
      再度ご確認いただけますでしょうか。

      Private Sub Application_Reminder1(ByVal objItem As Object)
       ⇒修正:Private Sub Application_Reminder(ByVal objItem As Object)

      If objItem.Subject = strItemSubject1 And objItem.Class = “olAppointment” Then
       ⇒修正:If objItem.Subject = strItemSubject1 And objItem.Class = “26” Then
       ※うまくいかなかったら、And objItem.Class = “26”を外すか、そもそも変数strItemSubject1と件名が一致しているかご確認ください。

  • コメントを残す

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