关于微软com object早期绑定和后期绑定的用法

软件教程 admin 2016-06-08 19:13 1655 0

给客户写追溯系统或者一般的打印程序,一般都会遇到客户需要导出或导入EXCEL数据的情况。


而我用的电脑一般是一种EXCEL环境,而客户用的电脑OFFICE版本从低到高各个版本都有。这样程序的兼容性就打了折扣。


为了解决这个问题,我需要不用通常的方式,先引用EXCEL类型库,而是程序里引用类型库,也就是所谓的后期绑定。


代码区别如下,我已经测试通过。

1,通常的做法,引用EXCEL类型库,早期绑定。

Early Binding

Sub EarlyBindingEx()
    Dim oXLApp As Excel.Application    
    Dim oXLWb As Excel.Workbook    
    Dim oXLWs As Excel.Worksheet    
    
    '~~> Establish an EXCEL application object
    On Error Resume Next
    Set oXLApp = GetObject(, "Excel.Application")

    '~~> If not found then create new instance
    If Err.Number <> 0 Then
        Set oXLApp = New Excel.Application    End If
    Err.Clear    On Error GoTo 0

    '~~> Show Excel
    oXLApp.Visible = True

    '~~> Open files
    Set oXLWb = oXLApp.Workbooks.Open("C:Sample.xlsx")

    '~~> Set the relevant worksheet
    Set oXLWs = oXLWb.Sheets(1)

    '
    '~~> Rest of your code
    'End Sub

2,后期绑定。

Late Binding

Sub LateBindingEx()
    Dim oXLApp As Object
    Dim oXLWb As Object, oXLWs As Object

    '~~> Establish an EXCEL application object
    On Error Resume Next
    Set oXLApp = GetObject(, "Excel.Application")

    '~~> If not found then create new instance
    If Err.Number <> 0 Then
        Set oXLApp = CreateObject("Excel.Application")
    End If
    Err.Clear    On Error GoTo 0

    '~~> Show Excel
    oXLApp.Visible = True

    '~~> Open files
    Set oXLWb = oXLApp.Workbooks.Open("C:Sample.xlsx")

    '~~> Set the relevant worksheet
    Set oXLWs = oXLWb.Sheets(1)

    '
    '~~> Rest of your code
    'End Sub

关于这个问题,微软也有相应的文章可以参考。

https://support.microsoft.com/en-us/kb/245115

早期绑定:

' Set reference to 'Microsoft Excel 8.0 Object Library' in
' the Project|References dialog (or Tools|References for VB4 or VBA).

' Declare the object as an early-bound object
  Dim oExcel As Excel.Application

  Set oExcel = CreateObject("Excel.Application")

' The Visible property is called via the v-table
  oExcel.Visible = True

后期绑定:

' No reference to a type library is needed to use late binding.
' As long as the object supports IDispatch, the method can 
' be dynamically located and invoked at run-time.

' Declare the object as a late-bound object
  Dim oExcel As Object

  Set oExcel = CreateObject("Excel.Application")

' The Visible property is called via IDispatch
  oExcel.Visible = True


评论区