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

时间:2012-02-28 23:16:08

标签: excel vba excel-vba

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

Range("export_date") = Date - 1

如果他们进入参考列表中的工具,参考,则会出现此错误:

MISSING: MS Outlook 14.0 Object Library

如果他们取消选择该库,请选择

  

MS Outlook 12.0对象库

...代码然后正确编译,电子表格适用于他们。

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

有人能建议一种更好的方法来处理与旧版MS Office向后兼容的问题吗?

2 个答案:

答案 0 :(得分:24)

tbone,你所说的强类型被称为“早期绑定”。

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

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

有趣的阅读。

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

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

我的建议

如果你喜欢它,请不要因为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

西特

答案 1 :(得分:0)

使用条件编译! 例如:

#if Updating then
     ...late binding
#Else
     ...early binding
#End If