【问题标题】:Alternative to `CreateObject("Outlook.Application")`?替代`CreateObject("Outlook.Application")`?
【发布时间】:2013-09-20 16:05:21
【问题描述】:

我的预期过程:

  1. 这是在运行 Windows 2008 Server r2 的 VM 上
  2. Windows 任务计划程序使用启动宏启动 Access 数据库。
  3. VBA 脚本会生成并保存一些高度自定义的电子邮件。

问题:

当我手动打开数据库并运行脚本时,这个脚本工作得很好。但是当我使用该任务启动它时,我在以下行的第 2 行收到错误 429 'ActiveX component can't create object':

Dim OlApp As Outlook.Application
Set OlApp = CreateObject("Outlook.Application")

为什么在任务调度器启动时会抛出错误,但手动运行却正常?

关于任务:

  1. 在“常规”选项卡上,我有以下设置:
    一种。在我的帐户下
    湾。拥有最高权限
    C。仅当我登录时
  2. 操作本身会打开 Access 2010 aka Office14,并使用 DB 的路径和名称、/x 和宏名称作为参数。当我将其作为批处理文件运行时,没有问题。
  3. 我对这个操作系统或现代任务调度程序几乎一无所知,但我总是可以学习。

更新

找到一篇关于这个主题的MS Support 文章。它特别指出CreateObjectCoCreateInstance 如果以这种方式使用会出现上述错误消息。但是,没有给出替代方案。

有什么建议吗?

【问题讨论】:

    标签: vba ms-access outlook scheduled-tasks


    【解决方案1】:

    为我解决的问题是以管理员身份运行 Outlook

    【讨论】:

      【解决方案2】:

      从 VBA 代码发送电子邮件时,我一直更喜欢使用 CDO,而不是尝试自动化 Outlook。有关通过 CDO 发送电子邮件的一些示例代码,请查看 here

      【讨论】:

      • 请记住,CDO 1.21 已超过 10 年未更新,Outlook 不再安装(自 Outlook 2010 起)
      • @DmitryStreblechenko 这可能是真的,但cdosys.dll 仍然包含在 Windows 的普通安装中(包括 64 位 Windows 上的 .dll 的 32 位和 64 位版本)。它可能不是最新的技术,但似乎仍然可以完成工作。
      • cdosys.dll 与 Outlook 无关:它允许您使用直接 SMTP 发送消息。虽然这对于某些用途可能很好,但最大的缺点是发送的邮件不会在 Outlook 的“已发送邮件”文件夹中创建/保存,除非您在代码中明确创建虚假邮件。
      【解决方案3】:

      任何 Office 应用(包括 Outlook)都不能通过服务使用。即使任务可以与桌面交互,COM 系统也不会让您连接到正在运行的 COM 对象(Outlook 是单例),因为安全上下文不同。

      您可以使用扩展 MAPI(C++ 或 Delphi)、CDO 1.21(已弃用且不再更新或安装)或 Redemption(使用 RDO 对象系列) - 所有这些都将扩展 MAPI 系统加载到-proc 而不是连接到进程外 COM 对象(由 Outlook.exe 公开)。

      【讨论】:

      • 赎回听起来很有希望,特别是因为它可以与 Exchange 一起使用。或者,我可以让任务调度程序将其作为常规桌面程序运行吗?无需将其作为服务运行。
      • 任务计划程序可能工作也可能不工作,根据我的经验,这完全取决于 Outlook/Windows 版本和 UAC。
      【解决方案4】:

      我找到了解决您的问题的方法,VBScript 解释器 (cscript.exe/wscript.exe) 带有一个 64 位版本的 Windows 和一个 32 位版本。

      我所做的是安装 Office x86,然后卸载,然后从任务计划程序安装 x64 测试电子邮件,然后我重新安装 x86。每次安装和卸载后我都重新启动。当您安装 x64 和 x86 版本的 office 时,它​​将同时安装 cscript.exe/wscript.exe x86 和 x64 版本。最后允许您从任务计划程序发送邮件(在 Windows 10 上测试)。

      谢谢

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2023-04-05
        • 2022-12-11
        • 1970-01-01
        • 2015-03-15
        • 1970-01-01
        • 2012-11-23
        • 2014-11-15
        • 1970-01-01
        相关资源
        最近更新 更多