Outlook で定期的にマクロを実行する方法


コメントにて以下のようなご要望をいただきました。


5分おきに実行などの自動リピートが可能な記述がありましたら教えていただきたいです。予定表の同期が目的で、とりあえず現在は不定期となりますが、メール受信時に実行で同期を行おうと考えています。


Outlook のオブジェクト モデルには定期的に発生するイベントというものは用意されていません。
しかし、タスクのアラームが発生した際のイベントはあるので、アラームを現在から 5 分後に設定し、アラームが発生したら処理をして再びアラーム設定、ということを繰り返せば、5 分間隔での実行が可能になります。

以下は 5 分間隔でマクロを実行するサンプルです。

' ここをトリプルクリックでマクロ全体を選択できます。
Const REMINDER_TASK_SUBJECT = "定期タスク実行用 - 変更しないでください"
Const INTERVAL_MINUTES = 5
' アラームで発生するイベント
Private Sub Application_Reminder(ByVal Item As Object)
    If Item.Subject = REMINDER_TASK_SUBJECT Then
        If Item.ReminderTime > Now Then
            Exit Sub
        End If
        Item.ReminderSet = False
        RunTask
    End If
End Sub
'
Public Sub RunTask()
    '
    ' 定期的に実行する処理をここに記述します。
    '
    Dim fldTask As Folder
    Dim objTask As TaskItem
    Set fldTask = Session.GetDefaultFolder(olFolderTasks)
    For Each objTask In fldTask.Items
        If objTask.Subject = REMINDER_TASK_SUBJECT Then
            Exit For
        End If
    Next
    If objTask Is Nothing Then
        If objTask Is Nothing Then
            Set objTask = CreateItem(olTaskItem)
            objTask.Subject = REMINDER_TASK_SUBJECT
        End If
    End If
    objTask.ReminderTime = DateAdd("n", INTERVAL_MINUTES, Now)
    Debug.Print objTask.ReminderTime
    objTask.ReminderSet = True
    objTask.Save
End Sub

定期的に実行したい処理を RunTask の先頭に記述するか、RunTask から処理を呼び出し、処理を開始するときには RunTask を実行します。
すると、タスク フォルダーに REMINDER_TASK_SUBJECT で設定した件名のタスク アイテムが生成され、そのアラームが 5 分後に設定されます。
定期的なタスクを停止するには、タスク アイテム自体を削除してください。

マクロの登録方法やメニューへの追加について

広告

Outlook で定期的にマクロを実行する方法」への5件のフィードバック

  1. いつも参考にさせてもらっています。
    5分おきにスケジュールをcsvに吐き出すマクロを作ろうとしておりまして、予定通りの動きができたのですが、
    別の端末で同時に同一アカウントでOUTLOOKを起動すると吐き出しが止まってしまいます。

    複数端末で同一アカウントでOUTLOOKを起動した場合にも、正しく動くように
    できませんでしょうか。(ここで質問する内容ではないかもしれませんが)

  2. すみません、関係ありませんでした。
    アラームの通知が煩わしいのでオフにしてました。
    アラームがポップアップで出てきて初めてループするんですね?

    頻繁にポップアップが出てくるのは厳しいので他のやり方はないでしょうか。

  3. 1,2です。自己解決しました。
    vbsで取り出し、csvに書き込むバッチをつくり、バッチをスケジューラに登録しました

  4. 「かじじ」です

    この機能を利用しています。
    「定期的なタスクを停止するには、タスク アイテム自体を削除してください。」ですが
    下記のようにマクロを書いたのですが定期起動が停止しません。どこが間違っているのでしょうか?
    Private Sub CommandButton1_Click()
    Const REMINDER_TASK_SUBJECT = “定期タスク実行用 – 変更しないでください”
    Dim fldTask As Folder
    Dim objTask As TaskItem

    Set fldTask = Session.GetDefaultFolder(olFolderTasks)
    For Each objTask In fldTask.Items
    If objTask.Subject = REMINDER_TASK_SUBJECT Then
    Exit For
    End If
    Next
    If objTask Is Nothing Then

    Else
    objTask.Subject = “”
    Set fldTask = Nothing
    Set objTask = Nothing
    End If

    Unload Me

    End Sub

    アドバイスお願いします。

コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト / 変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト / 変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト / 変更 )

Google+ フォト

Google+ アカウントを使ってコメントしています。 ログアウト / 変更 )

%s と連携中