我的任务是修复 Microsoft Access 系统上的 VB 中的一个问题,但我无法解决。此问题仅发生在运行该软件的 5 台 PC 中的一台上。 我试过了
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 年微软。 先谢谢你了
您不妨尝试 Dreadfool 在 MSDN 上建议的一种奇怪的解决方法。它不需要您更改一行代码。
只需将宏保存到另一个文件中并将这个新文件导入到您的项目中。当代码在更新 365 后停止工作时,这个简单的步骤对我的情况有所帮助。
我怀疑问题是对不同 Outlook 版本的错误引用。
如果您的用户环境可能使用不同版本的 Outlook 或 Access,则需要采用后期绑定。您发布的第二个代码已完成一半,但我建议您阅读此处; http://sourcedaddy.com/ms-access/late-binding.html
奇怪的是,我不确定为什么,我按照该用户建议的略有不同的版本解决了这个问题:
对我有用的是打开 VB 编辑器,然后进入“工具”>“参考”。我必须检查更多参考资料(OLE Automation、EBApp 等)。我再次运行宏,没有出现错误。 – jpruizs 2018 年 5 月 9 日 2:52
相反,我拥有所有相关的对象库引用,但我重新排列了它们的优先级,如下所示:
不知何故,这有效,我不再收到编译错误。我非常确定库引用是罪魁祸首,因为我从另一个运行良好的系统复制了宏文本。
最近 MS Office 更新后,我们的工具中开始出现“Outlook.Application 不支持对象库功能”错误。
将“Microsoft Outlook 16.0 对象库”置于尽可能高的优先级解决了该问题。
刚刚遇到了同样的问题,在并排安装 Visio 2016 64 位和 Office 2016 ProPlus 64 位安装后,Outlook 宏停止工作(相同的错误消息,但在“GetFolder”调用上)。
首先尝试重启 -> 没有效果。
然后尝试了Office的离线修复->没有效果。
然后在线修复 -> 使其再次工作。
当您将office升级到2019或office 365版本时,您需要重新导入您的自定义开发,即vba中的所有模块、表单等。
只需导出一个文件夹中的所有模块,将其删除并再次导入即可。就可以解决问题了。
谢谢大家, 这对我最近很有帮助!我想补充一点,如果没有额外的步骤(我不想这样做),则无法删除和重新导入附加到表单的自定义代码。我对这样的代码库也有类似的问题。代码有一天可以工作,第二天,在没有代码更改的情况下,我在正确声明的对象变量上得到了“类型不匹配”。解决方法:选择所有代码(ctrl-a)。剪切所有代码(ctrl-x)。保存文件(ctrl-s)。将代码粘贴回(ctrl-v)。再次保存(ctrl-s)。问题解决了。