旧版本的参考 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的主要内容,如果未能解决你的问题,请参考以下文章