如何在 Outlook 关闭时自动打开外出办公功能?

如何在 Outlook 关闭时自动打开外出办公功能?

是否可以在关闭 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

  1. 仅对于 Outlook 2007,您必须安装 CDO,否则代码将失败:http://www.microsoft.com/downloads/en/details.aspx?familyid=2714320d-c997-4de1-986f-24f081725d36&displaylang=en

  2. 假设您公司的组策略不会覆盖此设置,请将ToolsMacros→中的安全性更改SecurityNo Security Check for macros

  3. 前往ToolsMacrosVisual Basic Editor

  4. 单击 Visual Basic 图标,然后点击F2打开对象浏览器。

  5. 在左侧窗格中的新项目中展开它直到看到ThisOutlookSession并双击它。

  6. 将以下代码剪切粘贴到刚刚打开的代码窗口中并保存:

    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
    
  7. 关闭并打开 Outlook。

  8. 它会给你一条关于宏的消息。启用它们。

对于 Outlook 2010

如果你能修复代码,以下是 Outlook 2010 的步骤。我之所以包括这些步骤,是因为许多项目的位置已经改变,可能很难找到。在当前代码中,我还指出了失败的步骤。

  1. 假设您公司的组策略不会覆盖此设置,请将FileOptionsTrust CenterTrust Center Settings→中的安全性更改Macro SettingsEnable all macros

  2. 首先启用→ →Developer中的选项卡,然后检查右侧栏。FileOptionsCustomize RibbonDeveloper

  3. 单击 Visual Basic 图标,然后按 F2 打开对象浏览器。

  4. 转到Classes(左栏)→ThisOutlookSession并双击它。

  5. 将以下代码剪切粘贴到刚刚打开的代码窗口中并保存:

    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
    
  6. 关闭并打开 Outlook。

  7. 返回Developer选项卡 →Macros图标。它将向您显示有关宏的消息。启用它们。

答案2

解决此问题的另一种方法是执行以下步骤(因为我不相信您可以通过 VBA 更改外出助理的日期/时间参数):

  1. 在“规则和警报”中创建一个规则,当消息到达时,该规则会自动回复电子邮件“收件人”部分的每封电子邮件。
  2. 设置规则以使用“让服务器使用特定消息回复”进行响应
  3. 用标准模板响应填写“具体信息”(粗略示例:亲爱的发件人,我目前在办公室。工作时间是上午 8 点至下午 5 点。我回来后会及时回复。此致,<-插入签名->
  4. 将规则命名为“HomeTime”(或有意义的名称 - 下面的 vba 代码将需要它)
  5. 更改 Outlook 中的 VBA 宏安全性以适当地启用宏的运行
  6. 包括在启用/禁用规则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 会调出宏编辑器。开始在那里探索。

相关内容