Access 2016 VBA运行时错误287问题求助
解决Office 2016升级后VBA与Outlook交互的报错问题
升级到Office 2016后遇到这种VBA报错太常见了,两个数据库报错位置不同其实大概率是同一类兼容性问题的不同表现,我给你几个针对性的解决思路:
1. 先搞定对象库引用问题(首行报错的核心原因)
第一个数据库在代码首行报错,基本是Outlook对象库引用版本不匹配导致的。升级Office后,旧的引用可能指向了Office 2013或更早的库,和2016不兼容:
- 打开VBA编辑器(按Alt+F11),点击顶部菜单栏的「工具」→「引用」
- 在弹出的对话框里,找到并勾选Microsoft Outlook 16.0 Object Library,如果之前勾选的是旧版本(比如15.0),记得取消旧的勾选
- 如果想让代码兼容多版本Office,更稳妥的做法是用后期绑定:把代码里的
改成Dim objOutlook As Outlook.Application
这样不用依赖特定版本的对象库,彻底避免版本引用问题。Dim objOutlook As Object Set objOutlook = CreateObject("Outlook.Application")
2. 修复Recipients.Add的报错
第二个数据库在添加收件人时报错,哪怕换邮箱地址也不行,试试这几个办法:
- 强制解析收件人:Outlook 2016对收件人验证更严格,添加后手动触发解析,避免未解析的收件人导致报错:
Set objOutlookRecip = .Recipients.Add("你的收件人邮箱") ' 手动解析收件人 objOutlookRecip.Resolve ' 检查是否解析成功 If Not objOutlookRecip.Resolved Then MsgBox "无法识别收件人,请确认邮箱/别名是否正确" Exit Sub End If - 检查Outlook宏安全设置:Office 2016加强了宏权限,可能阻止Access的VBA访问Outlook。打开Outlook,依次点击「文件」→「选项」→「信任中心」→「信任中心设置」→「宏设置」,选择「启用所有宏(不推荐;可能会运行有潜在危险的代码)」(测试用),或者把你的Access数据库添加到「信任位置」,这样就能正常调用Outlook了。
- 检查Office位数兼容性:如果你的Access是32位,而Outlook是64位(或者反过来),跨位数的组件交互很容易出问题。打开Office任意软件(比如Word),点击「文件」→「账户」→「关于Word」,查看位数,尽量让Access和Outlook保持同一位数。
3. 额外的小技巧
有时候Outlook未启动也会导致调用失败,可以在代码里先检测Outlook是否在运行,没运行就启动它:
Dim objOutlook As Object On Error Resume Next ' 尝试获取已运行的Outlook实例 Set objOutlook = GetObject(, "Outlook.Application") If Err.Number <> 0 Then ' 没运行就新建实例 Set objOutlook = CreateObject("Outlook.Application") End If On Error GoTo 0
内容的提问来源于stack exchange,提问作者Deb
相关产品推荐
相关产品推荐

