1

私はこのコードをクラスモジュールに持っています-msdnとこのstackoverflowスレッドで述べられているように

Public WithEvents objReminders As Outlook.Reminders

Private Sub Application_Startup()
    Set objReminders = Application.Reminders
End Sub

Private Sub Application_Reminder(ByVal Item As Object)
    Call Send_Email_Using_VBA
    MsgBox ("Litigate!") 
End Sub

このスレッドの下部にあるコードを使用してみましたが、どちらも起動しません。

私が得ることができるのは、Outlookのリマインダーポップアップだけです。関数呼び出しを削除しても、ブレークポイントはヒットせず、Msgbox は表示されません。何度か再起動しましたが、結果はありません。

私は何か重要なものを見逃していますか?

4

3 に答える 3

2

オブジェクトでイベントWithEventsを処理するために使用していますが、一致するサブルーチンを宣言していません。以下の私のコードでは、対あなたの潜水艦に注意してください。ReminderobjRemindersobjReminders_...Application_...

Outlook 2003 であなたのコードを試してみたところ (Office 2007 を持っていないので、そこでテストすることはできません)、次のようになりました。

Public WithEvents objReminders As Outlook.Reminders

Private Sub objReminders_Snooze(ByVal ReminderObject As Reminder)
    Call Send_Email_Using_VBA
    MsgBox ("Litigate!")
End Sub

Private Sub Class_Initialize()
    Set objReminders = Outlook.Reminders
End Sub

通常のコード モジュールでこれを実装します。

Sub test()

Dim rmd As New ReminderClass

rmd.objReminders.Item(1).Snooze 1 'Triggers objReminders_Snooze in class module
rmd.objReminders.Item(2).Snooze 1

End Sub

Snoozeこれは、明示的に呼び出すイベントでトリガーされます。ただし、これは、イベントが最初に発生したときにトリガーする場合にも機能するはずです (これは、私が知る限り、リマインダーが から起動したときにトリガーされませんSnooze)。テスト用にリマインダーを設定していません。これ以上の問題がある場合は、それに関するいくつかの独自のテストを設定します。

Private Sub objReminders_ReminderFire(ByVal ReminderObject As Reminder)
    Call Send_Email_Using_VBA
    MsgBox ("Litigate!")
End Sub

アップデート:

2010年にこれをいじった後、次のことが機能することがわかりました(少なくとも起動しますが、常に起動しているように見えました):

Private Sub Application_Reminder(ByVal Item As Object)
    Call Send_Email_Using_VBA
    MsgBox ("Litigate!")
End Sub

ThisOutlookSessionこれは、オブジェクト モジュールでセットアップされました。これを追加すると何か効果がありますか?

于 2012-07-18T17:31:02.730 に答える
1

これは、別のモジュールではなく、ThisOutlookSession コードに含まれている必要があることに注意してください。

Private Sub objReminders_ReminderFire(ByVal ReminderObject As Reminder)
    Call Send_Email_Using_VBA
    MsgBox ("Litigate!")
End Sub
于 2015-05-06T19:34:44.787 に答える
0

この質問に対する実際の回答は次のとおりです。定期的な予定を設定し、予定の Application_Reminder イベントにコードを配置している場合、予定自体のドロップダウンで特別にリマインダー期間を設定しない限り、リマインダー イベントは発生しません。

私はこれで何日も遊んでいましたが、それが単一の予定でない限り、イベントは発生しませんでした-繰り返しは機能しませんでした。

5 分のリマインダー時間で定期的な予定を設定すると、すべてが完全に機能します。

参考までに、ローカル フォルダーに保存されている電子メール テンプレートを使用して、ユーザー情報 (セルフ パスワード リセット) のリマインダーを毎月送信するために使用するコードをいくつか示します。今は完璧に動作します。「Send Mail」と呼ばれる自動メールを送信する場合は、独自の新しいカテゴリを作成することを忘れないでください。各予定はこのカテゴリに設定する必要があり、サブ内でチェックされます。

    Private Sub Application_Reminder(ByVal Item As Object)
      Dim objMsg As MailItem

       On Error Resume Next


    'IPM.TaskItem to watch for Task Reminders
    If Item.MessageClass <> "IPM.Appointment" Then
      Exit Sub
    End If

    If Item.Categories <> "Send Mail" Then
      Exit Sub
    End If

     'Check which Template for Reminder we need to send by looking for the keyword in the Reminder Appointment

If InStr(Item.Subject, "e-Expenses Password Resets") > 0 Then
    Set objMsg = Application.CreateItemFromTemplate("C:\Reminder Emails\e-Expenses Resetting your own password.oft")

ElseIf InStr(Item.Subject, "e-Learning Password Resets") > 0 Then
    Set objMsg = Application.CreateItemFromTemplate("C:\Reminder Emails\e-Learning Resetting your own password.oft")

ElseIf InStr(Item.Subject, "EMIS Password Resets") > 0 Then
    Set objMsg = Application.CreateItemFromTemplate("C:\Reminder Emails\EMIS Web Resetting your own password.oft")

ElseIf InStr(Item.Subject, "NHS email Password Resets") > 0 Then
    Set objMsg = Application.CreateItemFromTemplate("C:\Reminder Emails\NHS Net eMail Resetting your own password.oft")

ElseIf InStr(Item.Subject, "STRATA Password Resets") > 0 Then
    Set objMsg = Application.CreateItemFromTemplate("C:\Reminder Emails\STRATA Resetting your own password.oft")

ElseIf InStr(Item.Subject, "VPN Password String Resets") > 0 Then
    Set objMsg = Application.CreateItemFromTemplate("C:\Reminder Emails\VPN Resetting your own password.oft")

Else: Exit Sub

End If

 'Location is the email address we send to, typically to ALL users
  objMsg.To = Item.Location
  objMsg.Subject = Item.Subject  'Make the subject of the Appointment what we want to say in the Subject of the email
  objMsg.Send


  Set objMsg = Nothing
End Sub

楽しむ。

デイブ・トーマス

于 2016-04-29T09:27:28.247 に答える