Lorsque vous souhaitez utiliser les fonctionnalités d’autres applications, vous devez décider si vous souhaitez utiliser une liaison précoce ou tardive des variables d’objet.

Liaison anticipée

La liaison entre la variable objet et l’objet a lieu lorsque l’application est compilée.

Cela se traduit par de meilleures performances par rapport au moment où la liaison a lieu lorsque l’application est exécutée (liaison tardive).

Si vous souhaitez créer une liaison anticipée, vous devez définir une référence à la bibliothèque d’objets « étrangère » que vous souhaitez utiliser.

Cela se fait à partir du VBE en utilisant le menu Outils, Références …​. Lorsqu’un VBProject a une référence à une bibliothèque d’objets, vous pouvez déclarer des variables d’objet spécifiques (par exemple Dim oDoc As Word.Document). Cela facilitera également la programmation des «objets étrangers» puisque le VBE affichera la même aide à la programmation concernant les propriétés, les méthodes et les événements qu’il affiche pour les objets appartenant à l’application à partir de laquelle vous travaillez (le VBE a automatiquement ajouté le référence à cette application à l’avance).

Ceci est un exemple de code général montrant une erreur d’automatisation 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

Reliure tardive

La liaison entre la variable objet et l’objet a lieu lors de l’exécution de l’application.

Cela entraîne des performances plus lentes par rapport au moment où la liaison a lieu lorsque l’application est compilée (liaison anticipée).

Si vous n’ajoutez pas de référence à la bibliothèque d’objets appartenant à l’application « étrangère », vous devez déclarer des variables d’objet générales (par exemple Dim oDoc As Object). Cela rendra plus difficile la programmation des « objets étrangers » car le VBE n’affichera pas la même aide à la programmation concernant les propriétés, les méthodes et les événements qu’il affiche pour les objets appartenant à l’application avec laquelle vous travaillez.

Ceci est un exemple de code général:

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