旧版本的参考 Office 对象库...缺少 mso.dll

Posted

技术标签:

【中文标题】旧版本的参考 Office 对象库...缺少 mso.dll【英文标题】:Reference Office Object Library for older versions...missing mso.dll 【发布时间】:2017-03-08 18:01:20 【问题描述】:

我在 Access 2016 中进行开发。我使用 VBA 创建了一个自定义快捷菜单(右键单击菜单)。为了让这个 VBA 代码运行,我必须启用 Microsoft Office 16.0 对象库引用。

每当我将此数据库部署到使用旧版本 Access(2013 和 2010)的 PC 时,数据库都会寻找不存在的 Microsoft Office 16.0 对象库。我希望 Access 足够聪明,可以为所安装的 Microsoft 版本自动选择适当的对象库。但是,在我手动设置适当的对象库之前,它不会并且代码不会运行。

有没有更好的自动化方法?是否有一些我可以实现的 VBA 代码可以找到正确的库?我想出的唯一解决方案是在将数据库部署到其他 PC 之前,在旧版本的 Access 中设置对象库(找到更新的对象库似乎没有问题,只有旧的。)

谢谢大家。

【问题讨论】:

application.VBE.ActiveVBProject.References.AddFromFile("")可以根据版本使用吗? 我可以引用基于 GUID 的库吗?你知道我在哪里可以找到合适的 GUID 或 GUID 列表吗?我在谷歌上找不到任何东西 【参考方案1】:

看来您已将依赖项提前绑定到 16.0 类型库;早期绑定引用始终是特定于版本的,您只能早期绑定到一个特定版本。

因为您需要支持多个版本,所以您需要将所有内容都切换到后期绑定。

你没有提供任何代码,所以我给你一个假设的例子——而不是这个:

Dim foo As Library.SomeType
Set foo = New Library.SomeType
foo.DoSomething(Library.SomeEnumValue)

您需要这样做(并从您的项目中删除早期绑定引用):

Const SomeEnumValue As Long = 42 'Library.SomeEnumValue
Dim foo As Object
Set foo = CreateObject("Library.SomeType")
foo.DoSomething(SomeEnumValue)

据我所知,没有自动化的方法可以做到这一点,但是您可能想关注Rubberduck issue #1184,它专门为此目的制作一个重构工具(完全披露:我管理那个开源项目)。

【讨论】:

msoBarPopup 未定义 - 您是否在模块顶部指定 Option Explicit?该代码不应该编译。如果不引用 MSO.DLL,则需要定义自己的 msoBarPopup 常量(或直接使用其基础值)。 谢谢。我试图切换到后期绑定但没有成功。这是我的代码:Private Sub CreateSimpleShortcutMenu() ` Dim cmbShortcutMenu As Object 'Office.CommandBar` ` '创建一个名为“SimpleShortcutMenu”的快捷菜单。` ` Set cmbShortcutMenu = CommandBars.Add("SimpleShortcutMenu", msoBarPopup, False, True)` Set cmbShortcutMenu = Nothing End Sub 只要我引用了该库并且正在使用 Access 2016,它就可以正常工作。但是当我尝试在旧版本中运行数据库时,我仍然遇到同样的问题 你必须删除引用的库,否则你仍然处于早期绑定状态。 好的,谢谢。我会试试然后回复你 谢谢!那解决了它!我用基础值替换了 mso 常量。

以上是关于旧版本的参考 Office 对象库...缺少 mso.dll的主要内容,如果未能解决你的问题,请参考以下文章

MS Access VBA参考

python安装office库成功

access新建一个表时就弹出 对象库未注册 请问怎样解决

ms office与office有区别吗

MS Office是啥

任何第三方提供渲染MS-office(word,ppt,excel)的android库