1

我的预期过程:

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

问题:

当我手动打开数据库并运行脚本时,这个脚本工作得很好。但是当我使用该任务启动它时,我在第 2 行收到错误 429“ActiveX 组件无法创建对象”:

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

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

关于任务:

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

更新

找到了一篇关于这个主题的MS Support文章。它特别指出,CreateObject如果CoCreateInstance以这种方式使用,上述错误消息将失败。然而,没有给出替代方案。

请问有什么建议吗?

4

4 回答 4

2

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

于 2013-11-22T12:12:28.160 回答
1

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

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

于 2013-09-22T21:21:34.760 回答
1

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

于 2013-09-20T21:19:52.793 回答
0

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

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

谢谢

于 2016-06-02T14:24:29.967 回答