防止Excel VBA编译错误,因为用户安装了旧版本的MS Office(MS Outlook)?

如果我有一个电子表格,我从VBA编辑器引用了MS Outlook 14.0 Object Library,并且只安装了MS Outlook 12.0的用户,那么当这个用户打开电子表格时,他们会在这一行上得到一个编译错误:

Range("export_date") = Date - 1 

如果他们进入工具,参考,在参考列表中,有这个错误:

 MISSING: MS Outlook 14.0 Object Library 

如果他们取消select该库,而是select

MS Outlook 12.0对象库

…代码然后正确编译和电子表格正常工作。

我不明白为什么在Date()函数上失败,因为这是VBA函数,而不是Outlook函数。 但更重要的是,有没有办法避免这种情况? 我唯一能想到的就是不设置引用,只使用Objecttypes的variables,并通过CreateObject(“Outlook.Application”)等实例化,但是我讨厌放弃强types等等。

任何人都可以提出一个更好的方式来处理这个问题,向后兼容旧版本的MS Office?

tbone,你所说的强打字被称为“早绑定”。

不幸的是,早期绑定的一个缺点是,如果最终用户没有与您的版本相同,那么您将得到这些错误。

如果你问我,我更喜欢Late Binding(你不创build引用并使用CreateObject来创build一个实例)

一个有趣的阅读。

主题:在自动化中使用早期绑定和后期绑定

链接 : http : //support.microsoft.com/kb/245115

我的build议

如果因为intellisense而喜欢它,不要放弃早期绑定。 但是,在分发应用程序之前,请将代码更改为“Latebinding”。 在“早期绑定”和“晚期绑定”中编写代码的方式没有多大区别。

这是一个例子

早期绑定

 '~~> Set reference to Excel Object Library Sub Sample() Dim oXLApp As Excel.Application Dim oXLBook As Excel.Workbook Dim oXLSheet As Excel.Worksheet '~~> Create a new instance of Excel Set oXLApp = New Excel.Application '~~> Add a new workbook Set oXLBook = oXLApp.Workbooks.Add Set oXLSheet = oXLBook.Worksheets(1) ' '~~> Rest of the code ' End Sub 

晚绑定

 '~~> Doesn't require a reference to Excel Object Library Sub Sample() Dim oXLApp As Object Dim oXLBook As Object Dim oXLSheet As Object '~~> Create a new instance of Excel Set oXLApp = CreateObject("Excel.Application") '~~> Add a new workbook Set oXLBook = oXLApp.Workbooks.Add Set oXLSheet = oXLBook.Worksheets(1) ' '~~> Rest of the code ' End Sub 

HTH

希德