Cuando desee utilizar la funcionalidad de otras aplicaciones, debe decidir si desea utilizar la vinculación temprana o tardía de las variables de objeto.

Enlace anticipado

El enlace entre la variable de objeto y el objeto tiene lugar cuando se compila la aplicación.

Esto da como resultado un mejor rendimiento en comparación con cuando el enlace tiene lugar cuando se ejecuta la aplicación (enlace tardío).

Si desea crear un enlace anticipado, debe establecer una referencia a la biblioteca de objetos «ajenos» que desea utilizar.

Esto se hace desde el VBE usando el menú Herramientas, Referencias …​ Cuando un VBProject tiene una referencia a una biblioteca de objetos, puede declarar variables de objeto específicas (por ejemplo, Dim oDoc As Word.Document). Esto también hará que sea más fácil programar los «objetos extraños» ya que el VBE mostrará la misma ayuda de programación con respecto a las propiedades, métodos y eventos que muestra para los objetos que pertenecen a la aplicación desde la que está trabajando (el VBE ha agregado automáticamente el referencia a esta solicitud por adelantado).

Este es un ejemplo de código general que muestra un error de automatización de vba:

Sub OLEAutomationEarlyBinding()

' replace xxx with one of the following:

' Access, Excel, Outlook, PowerPoint or Word

Dim oApp As xxx.Application ' early binding

Dim oDoc As xxx.Document

' Excel.Workbook, Outlook.MailItem, PowerPoint.Presentation, Word.Document

On Error Resume Next ' ignore errors

Set oApp = GetObject(, "xxx.Application")

' reference an existing application instance

If oApp Is Nothing Then ' no existing application is running

Set oApp = New xxx.Application ' create a new application instance

End If

On Error GoTo 0 ' resume normal error handling

If oApp Is Nothing Then ' not able to create the application

MsgBox "The application is not available!", vbExclamation

End If

With oApp

.Visible = True ' make the application object visible

' at this point the application is visible

' do something depending on the application...

Set oDoc = .Documents.Open("c:\foldername\filename.doc")

' open a document

'        ...

oDoc.Close True ' close and save the document

.Quit ' close the application

End With

Set oDoc = Nothing ' free memory

Set oApp = Nothing ' free memory

End Sub

Encuadernación tardía

El enlace entre la variable de objeto y el objeto tiene lugar cuando se ejecuta la aplicación.

Esto da como resultado un rendimiento más lento en comparación con cuando se produce el enlace cuando se compila la aplicación (enlace anticipado).

Si no agrega una referencia a la biblioteca de objetos que pertenece a la aplicación «externa», debe declarar las variables de objeto generales (por ejemplo, Dim oDoc As Object). Esto hará que sea más difícil programar los «objetos extraños» ya que el VBE no mostrará la misma ayuda de programación con respecto a las propiedades, métodos y eventos que muestra para los objetos que pertenecen a la aplicación desde la que está trabajando.

Este es un ejemplo de código general:

Sub OLEAutomationLateBinding()

' replace xxx with one of the following:

' Access, Excel, Outlook, PowerPoint or Word

Dim oApp As Object ' late binding

Dim oDoc As Object ' late binding

On Error Resume Next ' ignore errors

Set oApp = GetObject(, "xxx.Application")

' reference an existing application instance

If oApp Is Nothing Then ' no existing application is running

Set oApp = CreateObject("xxx.Application")

' create a new application instance

End If

On Error GoTo 0 ' resume normal error handling

If oApp Is Nothing Then ' not able to create the application

MsgBox "The application is not available!", vbExclamation

End If

With oApp

.Visible = True ' make the application object visible

' at this point the application is visible

' do something depending on the application...

Set oDoc = .Documents.Open("c:\foldername\filename.doc")

' open a document

'        ...

oDoc.Close True ' close and save the document

.Quit ' close the application

End With

Set oDoc = Nothing ' free memory

Set oApp = Nothing ' free memory

End Sub