替代`CreateObject(“Outlook.Application”)`?

时间:2013-09-20 16:05:21

标签: vba ms-access access-vba scheduled-tasks outlook-vba

我的预期流程:

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

    当我手动打开数据库并运行脚本时,此脚本可以正常工作。但是当我使用任务启动它时,我得到错误429'ActiveX组件无法在第二行创建对象':

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

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

    关于任务:

    1. 在常规标签上,我有以下设置:
      一个。在我的帐户下 湾拥有最高特权的 C。只有当我登录时
    2. 操作本身打开Access 2010又名Office14,其中包含DB的路径& name,/ x和宏名称作为参数。当我将其作为批处理文件运行时,没有问题。
    3. 我对这个操作系统或现代任务调度程序几乎一无所知,但我总能学习。
    4. 更新

      在这个主题上找到MS Support篇文章。它明确指出CreateObjectCoCreateInstance将失败,如果以这种方式使用上述错误消息。但是,没有替代方案。

      有什么建议吗?

4 个答案:

答案 0 :(得分:1)

从VBA代码发送电子邮件时,我始终倾向于使用CDO而不是尝试自动化Outlook。有关通过CDO发送电子邮件的示例代码,请查看here

答案 1 :(得分:1)

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

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

答案 2 :(得分:1)

为我修复的是以管理员身份运行Outlook

答案 3 :(得分:0)

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

我所做的是安装了Office x86然后卸载然后从任务调度程序工作安装了x64测试过的电子邮件,然后重新安装了x86。每次安装和卸载后我都重启了。当您安装x64和x86版本的office时,它将安装两个版本的cscript.exe / wscript.exe x86和x64。这最终允许您从任务调度程序发送邮件(在Windows 10上测试)。

由于