【问题标题】:ActiveX cannot create object on Set outA = CreateObject("Outlook.Application")ActiveX 无法在 Set outA = CreateObject("Outlook.Application") 上创建对象
【发布时间】:2017-07-13 14:04:17
【问题描述】:

我有一个旧版 VB6 应用程序,允许用户从应用程序本身发送电子邮件。

Dim outA As Outlook.Application

Set outA = New Outlook.Application

If outA Is Nothing = True Then
    'Outlook is not open... so need to create a new outlook
    Set outA = CreateObject("Outlook.Application")
End If

在 Windows 7 Office 2007 中可以正常工作。用户可以打开 Outlook,它可以正常工作。

在 Windows 10 Office 2016 中,此代码不起作用。它给了我一个错误

Set outA = New Outlook.Application. 

如果 Outlook 未打开,则代码有效。如果 Outlook 打开,我只会收到此错误。

错误是……

ActiveX 无法创建对象错误 429。

我的计算机上有本地权限。
如果我将我的 VB6 .exe 显式打开为 ADMIN 并将 Outlook 也作为 ADMIN 打开 - 代码不会给我带来任何问题。
我禁用了 UAC 提示。
我不能授予用户管理员权限。

我是否缺少 dll 或其他什么?我还有几个在 Windows 7 中使用过的应用程序,我没有遇到过这个问题。

【问题讨论】:

  • 我应该注意到我已经尝试过 - GetObject(,"Outlook.Application") - 同样的问题

标签: outlook windows-10 vb6


【解决方案1】:

保留早期绑定以进行开发,一旦完成,就将其废弃以进行后期绑定。不要忘记在 VBE 中删除对 Microsoft Outlook xx 对象库的引用。

早期绑定:

Dim outA As Outlook.Application
Set outA = New Outlook.Application

后期绑定:

Dim outA As Object
Set outA = CreateObject("Outlook.Application")

原因是早期绑定引用了特定版本的 Outlook,例如Microsoft Outlook 14.0 对象库,专门用于 Office 2010,因此如果它不可用,则会引发错误。引用本身标有“缺失”。

后期绑定的CreateObject("Outlook.Application") 负责这一点。

【讨论】:

  • 但参考是 Microsoft Outlook 16.0 ObjectLibrary。无论哪种方式,无论我使用早期绑定还是后期绑定,我都会收到错误消息。问题在于我打开 Outlook。当它打开时我得到一个错误,当它没有打开时我没有任何问题。除非我同时打开 Outlook 和 .exe,否则以管理员身份运行(在本地权限之上)。如果我没有收到 ACTIVEX 错误 - 我会收到一个弹出窗口,上面写着 Component Request Pending。该操作无法完成,因为其他应用程序正忙
  • @Kostas K. - 绝对不是。使用支持的最低 Outlook 版本开发代码。较新的版本始终向后兼容。
  • 是的,自从 Outlook 97 面世以来,我在过去的 20 年里一直在尝试这样做。当您使用早期绑定时,您的应用最终会使用 Outlook.Application 的 CLSID 调用 CoCreateInstance - 它是 {0006F03A-0000-0000-C000-000000000046},并且自 Outlook 97 以来没有更改。
【解决方案2】:

修复办公室并确定(对我来说这是解决方案)

【讨论】:

    猜你喜欢
    • 2018-01-31
    • 2021-08-04
    • 2013-10-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-04-09
    • 2010-12-25
    相关资源
    最近更新 更多