首页 文章

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

提问于
浏览
15

如果我有一个电子表格,我从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向后兼容的问题吗?

1 回答

  • 24

    tbone,你所谓的 Strong Typing 被称为"Early Binding" .

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

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

    一个有趣的读物 .

    Topic: Using early binding and late binding in Automation

    Linkhttp://support.microsoft.com/kb/245115

    My Suggestion

    如果你喜欢因为intellisense,不要放弃早期绑定 . 但是,在分发应用程序之前,请将代码更改为Latebinding . 在早期绑定和后期绑定中编码的方式没有太大区别 .

    这是一个例子

    Early Binding

    '~~> 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
    

    Late Binding

    '~~> 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

    希德

相关问题