是否可以在关闭 Outlook 2010 应用程序时启用“自动回复”功能?我喜欢在一天结束时启用“外出办公”功能,但匆忙之中很容易忘记。
答案1
我确实尝试过让这个功能为您服务,但我了解到 Outlook 2010 不再支持 CDO 1.2.1,而且我并不是一名程序员,因此我没有足够的知识来以其他方式编写代码。尽管 Microsoft 不支持也不推荐使用 CDO(那他们为什么会提到它呢?),但如果您有 Outlook 2007,则可以在升级到 Outlook 2010 之前安装 CDO。
http://support.microsoft.com/kb/2028411
我将发布如何在 Outlook 2003/2007 中执行此操作,以防有人遇到这种情况。我刚刚测试过。我还将发布 Outlook 2010 的其他步骤(假设您可以修复代码)。
对于 Outlook 2003/2007
仅对于 Outlook 2007,您必须安装 CDO,否则代码将失败:http://www.microsoft.com/downloads/en/details.aspx?familyid=2714320d-c997-4de1-986f-24f081725d36&displaylang=en
假设您公司的组策略不会覆盖此设置,请将
Tools
→Macros
→中的安全性更改Security
为No Security Check for macros
。前往
Tools
→Macros
→Visual Basic Editor
。单击 Visual Basic 图标,然后点击F2打开对象浏览器。
在左侧窗格中的新项目中展开它直到看到
ThisOutlookSession
并双击它。将以下代码剪切粘贴到刚刚打开的代码窗口中并保存:
Private Sub Application_Quit() Dim objMAPISession As Object Set objReminders = Nothing If MsgBox("Would you like to turn the Out of Office Assistant on?", vbYesNo, "Activate Out of Office Assistant") = vbYes Then Set objMAPISession = CreateObject("MAPI.Session") objMAPISession.Logon , , True, False objMAPISession.OutOfOffice = True objMAPISession.Logoff End If Set objMAPISession = Nothing End Sub
关闭并打开 Outlook。
它会给你一条关于宏的消息。启用它们。
对于 Outlook 2010
如果你能修复代码,以下是 Outlook 2010 的步骤。我之所以包括这些步骤,是因为许多项目的位置已经改变,可能很难找到。在当前代码中,我还指出了失败的步骤。
假设您公司的组策略不会覆盖此设置,请将
File
→Options
→Trust Center
→Trust Center Settings
→中的安全性更改Macro Settings
为Enable all macros
。首先启用→ →
Developer
中的选项卡,然后检查右侧栏。File
Options
Customize Ribbon
Developer
单击 Visual Basic 图标,然后按 F2 打开对象浏览器。
转到
Classes
(左栏)→ThisOutlookSession
并双击它。将以下代码剪切粘贴到刚刚打开的代码窗口中并保存:
Private Sub Application_Quit() Dim objMAPISession As Object Set objReminders = Nothing If MsgBox("Would you like to turn the Out of Office Assistant on?", vbYesNo, "Activate Out of Office Assistant") = vbYes Then Set objMAPISession = CreateObject("MAPI.Session") THIS IS THE STEP THAT FAILS objMAPISession.Logon , , True, False objMAPISession.OutOfOffice = True objMAPISession.Logoff End If Set objMAPISession = Nothing End Sub
关闭并打开 Outlook。
返回
Developer
选项卡 →Macros
图标。它将向您显示有关宏的消息。启用它们。
答案2
解决此问题的另一种方法是执行以下步骤(因为我不相信您可以通过 VBA 更改外出助理的日期/时间参数):
- 在“规则和警报”中创建一个规则,当消息到达时,该规则会自动回复电子邮件“收件人”部分的每封电子邮件。
- 设置规则以使用“让服务器使用特定消息回复”进行响应
- 用标准模板响应填写“具体信息”(粗略示例:亲爱的发件人,我目前在办公室。工作时间是上午 8 点至下午 5 点。我回来后会及时回复。此致,<-插入签名->)
- 将规则命名为“HomeTime”(或有意义的名称 - 下面的 vba 代码将需要它)
- 更改 Outlook 中的 VBA 宏安全性以适当地启用宏的运行
- 包括在启用/禁用规则
Application_Start
期间运行的以下代码:Application_Quit
Option Explicit Private Sub Application_Quit() SetRuleEnabled True End Sub Private Sub Application_Startup() SetRuleEnabled False End Sub Private Sub SetRuleEnabled(ByVal bEnable As Boolean) Dim oSession As Outlook.NameSpace Dim oRule As Outlook.Rule Dim oRules As Outlook.Rules Dim oPA As Outlook.PropertyAccessor Set oSession = Application.Session Set oRules = oSession.DefaultStore.GetRules() Set oPA = oSession.DefaultStore.PropertyAccessor '*** If the Out-Of-Office is already on (eg. holidays, sick leave etc.) '*** then it might be best to force this rule permanently off If oPA.GetProperty("http://schemas.microsoft.com/mapi/proptag/0x661D000B") Then bEnable = False End If For Each oRule In oRules If oRule.Name = "HomeTime" Then oRule.Enabled = bEnable oRules.Save Exit For End If Next End Sub
需要注意的问题是,此响应将针对每个后续回复每次触发。不同于忽略后续回复的外出助手。
PS. 使用上述 VBA 中的外出检查,您将需要参考 CDO 库。如果您不想检查外出是否已开启,则不需要 CDO。
答案3
太棒了!谢谢 KCotreau。我让它在 MS Outlook 2003 上运行了。下面是代码片段 - 我只是用 pre 和代码包裹了它,这样就不会把它全部放在一行中。
Private Sub Application_Quit()
Dim objMAPISession As Object
Set objReminders = Nothing
If MsgBox("Would you like to turn the Out of Office Assistant on?", vbYesNo, "Activate Out of Office Assistant") = vbYes Then
Set objMAPISession = CreateObject("MAPI.Session")
objMAPISession.Logon , , True, False
objMAPISession.OutOfOffice = True
objMAPISession.Logoff
End If
Set objMAPISession = Nothing
End Sub
这很好,但是否可以让它在未来的某一天/时间运行?这将是一个真正的优势,因为如果你计划度假并忘记转为 OOF,它将自动启动而无需人工干预...嗯?
答案4
看来 Outlook 在关闭时会生成一个 Application_Quit 事件,可以将其挂接以设置 OOF。在 Outlook 中按 Alt-F11 会调出宏编辑器。开始在那里探索。