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

时间:2017-03-08 18:01:21

标签: vba ms-access ms-access-2010 ms-access-2013

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

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

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

谢谢你们。

1 个答案:

答案 0 :(得分: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,其目的是专门为此制作一个重构工具(完全披露:I管理那个开源项目。)