防止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
希德