
特定のカテゴリのリマインダーが起動するたびにトリガーされる 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