关于微软com object早期绑定和后期绑定的用法
给客户写追溯系统或者一般的打印程序,一般都会遇到客户需要导出或导入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