VBA 経由で定期的なメールを送信した後、リマインダーを解除するにはどうすればよいですか?

VBA 経由で定期的なメールを送信した後、リマインダーを解除するにはどうすればよいですか?

特定のカテゴリのリマインダーが起動するたびにトリガーされる VBA コードを使用して、定期的な電子メールを作成できました。

http://www.slipstick.com/developer/send-email-outlook-reminders-fires/

私の質問は、電子メールの送信後にリマインダーを解除するにはどうすればいいかということです。 reminders(1).Dismiss という行を追加すると、その時点でコードが中断されます。

リマインダーの実行を続行すると、最終的に Outlook に表示されます。

リマインダー イベントを閉じるには、アプリケーション リマインダー マクロの実行を終了する必要があるようです。

答え1

MSDNによれば、Applcation.Reminderイベント使用されたSlipstickのマクロが実行される前にリマインダーダイアログが表示されます。しかし、Reminder.Dismiss方法リマインダー ダイアログにリマインダー (同じものである必要があるかどうかはわかりません) がすでに表示されている必要があります。これが機能しない理由です。とはいえ、私の知る限り、それがReminders(1)今起動したリマインダーであるという保証はありません。間違ったリマインダーを閉じようとしている可能性があります。

可能な解決策として(強調しておきますが、テストしていません)の場合は、 を使用してくださいReminders.Remove(Item.Subject)。ドキュメントには次のように記載されているようです。Reminders.Remove数値インデックスが必要ですが、試してみる価値はあります。また、リマインダー付きの 2 つのアイテムに同じ件名がある場合、正しいものを取得できる保証はありません。

答え2

私自身もこの問題に遭遇しました。j_foster のアイデアはうまく機能しているようです。ただし、通知のインデックスを識別するには、予定項目のエントリ ID を使用する方が適切です。そうすれば、 を使用できますremove()

以下を参照してください:

Private Sub Application_Reminder(ByVal Item As Object)
    If TypeOf Item Is AppointmentItem Then
        'Do Something...

        'Loop over all reminders and find index of appt
        Dim appt As AppointmentItem: Set appt = Item
        Dim i As Integer: i = 0
        Dim notif As reminder
        For Each notif In Application.Reminders
            i = i + 1
            If notif.Item.EntryID = appt.EntryID Then
                Call Application.Reminders.Remove(i)
                Exit For
            End If
        Next
    End If
End Sub

関連情報