我在类模块中有这个代码 - 正如msdn和this stackoverflow thread上所述
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
我已尝试使用this thread底部的代码,但也无法启动。
所有我能得到的是outlook的提醒弹出窗口。没有断点,Msgbox永远不会显示 - 即使我删除了函数调用。我已经重启了好几次而且没有结果。
我错过了重要的事情吗?
答案 0 :(得分:2)
您正在使用WithEvents
来处理Reminder
对象上的objReminders
事件,但您没有声明要匹配的潜艇。在下面的代码中,请注意objReminders_...
与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
对象模块中设置的。添加这个可以为你做什么吗?
答案 1 :(得分:1)
值得注意的是,这必须在ThisOutlookSession代码中,而不是一个不同的模块
Private Sub objReminders_ReminderFire(ByVal ReminderObject As Reminder)
Call Send_Email_Using_VBA
MsgBox ("Litigate!")
End Sub
答案 2 :(得分:0)
这个问题的实际答案如下: 如果您正在设置定期约会,并在预约时将代码放入Application_Reminder事件中,则除非您在约会本身的下拉列表中专门设置提醒时段,否则不会触发提醒事件。
我玩了好几天,事件永远不会开火,除非它是单一的约会 - 经常再也没用过。
设置定期约会,提醒时间为5分钟,一切正常。
仅供参考我使用的一些代码用于每月发送用户信息(自密码重置)提醒,使用存储在本地文件夹中的电子邮件模板。现在工作得很好。如果发送名为linke&#39; Send Mail&#39;的自动电子邮件,请务必创建自己的新类别。每个约会都必须设置为此类别,并在Sub。
中进行检查 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
玩得开心。
戴夫托马斯