编译错误:对象库功能不支持 Outlook.Application

问题描述 投票:0回答:7

我的任务是修复 Microsoft Access 系统上的 VB 中的一个问题,但我无法解决。此问题仅发生在运行该软件的 5 台 PC 中的一台上。 我试过了

  • 删除 Outlook & Access 并重新安装。
  • 删除 Microsoft Access 应用程序并重新安装。
  • 更改了代码以匹配我在另一个网站上找到的答案。

此代码会出现错误 代码如下。

    Dim objOutlook As Outlook.Application
    Dim objMailItem As MailItem
    Dim db As DAO.Database

    'Create email object and send attachment

    Set objOutlook = DetectOutlook()
    If objOutlook Is Nothing Then
        Set objOutlook = New Outlook.Application
    End If

我尝试按照另一个网站上的建议将其更改为这个。

    Dim objOutlook As Object
    Dim objMailItem As MailItem
    Dim db As DAO.Database

    'Create email object and send attachment

   If GetObject(, "Outlook.Application") = True Then    'Outlook was already running
        Set objOutlook = GetObject(, "Outlook.Application")    'Bind to existing instance of Outlook
    Else    'Could not get instance of Outlook, so create a new one
        Set objOutlook = New Outlook.Application
    End If

此代码更改最终迫使 Access 在运行时关闭。 我是 VB 和 Access 开发的新手,所以也许这是一个简单的修复,如果您需要任何进一步的信息,请询问。仅供参考,2016 年微软。 先谢谢你了

vba ms-access outlook
7个回答
12
投票

您不妨尝试 Dreadfool 在 MSDN 上建议的一种奇怪的解决方法。它不需要您更改一行代码。

只需将宏保存到另一个文件中并将这个新文件导入到您的项目中。当代码在更新 365 后停止工作时,这个简单的步骤对我的情况有所帮助。


5
投票

我怀疑问题是对不同 Outlook 版本的错误引用。

如果您的用户环境可能使用不同版本的 Outlook 或 Access,则需要采用后期绑定。您发布的第二个代码已完成一半,但我建议您阅读此处; http://sourcedaddy.com/ms-access/late-binding.html


3
投票

奇怪的是,我不确定为什么,我按照该用户建议的略有不同的版本解决了这个问题:

对我有用的是打开 VB 编辑器,然后进入“工具”>“参考”。我必须检查更多参考资料(OLE Automation、EBApp 等)。我再次运行宏,没有出现错误。 – jpruizs 2018 年 5 月 9 日 2:52

相反,我拥有所有相关的对象库引用,但我重新排列了它们的优先级,如下所示:

  1. Visual Basic 应用程序
  2. Microsoft Outlook 16.0 对象库
  3. Microsoft Office 16.0 对象库
  4. OLE 自动化

不知何故,这有效,我不再收到编译错误。我非常确定库引用是罪魁祸首,因为我从另一个运行良好的系统复制了宏文本。


1
投票

最近 MS Office 更新后,我们的工具中开始出现“Outlook.Application 不支持对象库功能”错误。

将“Microsoft Outlook 16.0 对象库”置于尽可能高的优先级解决了该问题。


0
投票

刚刚遇到了同样的问题,在并排安装 Visio 2016 64 位和 Office 2016 ProPlus 64 位安装后,Outlook 宏停止工作(相同的错误消息,但在“GetFolder”调用上)。

首先尝试重启 -> 没有效果。

然后尝试了Office的离线修复->没有效果。

然后在线修复 -> 使其再次工作。


0
投票

当您将office升级到2019或office 365版本时,您需要重新导入您的自定义开发,即vba中的所有模块、表单等。

只需导出一个文件夹中的所有模块,将其删除并再次导入即可。就可以解决问题了。


0
投票

谢谢大家, 这对我最近很有帮助!我想补充一点,如果没有额外的步骤(我不想这样做),则无法删除和重新导入附加到表单的自定义代码。我对这样的代码库也有类似的问题。代码有一天可以工作,第二天,在没有代码更改的情况下,我在正确声明的对象变量上得到了“类型不匹配”。解决方法:选择所有代码(ctrl-a)。剪切所有代码(ctrl-x)。保存文件(ctrl-s)。将代码粘贴回(ctrl-v)。再次保存(ctrl-s)。问题解决了。

© www.soinside.com 2019 - 2024. All rights reserved.