Informations de base sur l’automatisation OLE à l’aide VBA dans Microsoft Excel
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