Grundlegende Informationen über OLE-Automatisierung mit VBA in Microsoft Excel
Wenn Sie Funktionen aus anderen Anwendungen verwenden möchten, müssen Sie entscheiden, ob Sie die frühe oder späte Bindung von Objektvariablen verwenden möchten.
Frühe Bindung
Die Bindung zwischen der Objektvariablen und dem Objekt erfolgt beim Kompilieren der Anwendung.
Dies führt zu einer besseren Leistung im Vergleich zu dem Zeitpunkt, an dem die Bindung beim Ausführen der Anwendung erfolgt (späte Bindung).
Wenn Sie eine frühe Bindung erstellen möchten, müssen Sie einen Verweis auf die „fremde“ Objektbibliothek festlegen, die Sie verwenden möchten.
Dies erfolgt über die VBE über das Menü Extras, Referenzen …. Wenn ein VBProject einen Verweis auf eine Objektbibliothek hat, können Sie bestimmte Objektvariablen deklarieren (z. B. Dim oDoc As Word.Document). Dies erleichtert auch das Programmieren der „Fremdobjekte“, da die VBE dieselbe Programmierhilfe in Bezug auf Eigenschaften, Methoden und Ereignisse anzeigt, die sie für die Objekte anzeigt, die zu der Anwendung gehören, mit der Sie arbeiten (die VBE hat die automatisch hinzugefügt Verweis auf diesen Antrag im Voraus).
Dies ist ein allgemeines Codebeispiel, das einen vba-Automatisierungsfehler zeigt:
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
Späte Bindung
Die Bindung zwischen der Objektvariablen und dem Objekt erfolgt beim Ausführen der Anwendung.
Dies führt zu einer langsameren Leistung im Vergleich zum Zeitpunkt der Bindung beim Kompilieren der Anwendung (frühe Bindung).
Wenn Sie keinen Verweis auf die Objektbibliothek hinzufügen, die zur „fremden“ Anwendung gehört, müssen Sie allgemeine Objektvariablen deklarieren (z. B. Dim oDoc As Object). Dies erschwert das Programmieren der „Fremdobjekte“, da die VBE nicht dieselbe Programmierhilfe in Bezug auf Eigenschaften, Methoden und Ereignisse anzeigt, die sie für die Objekte anzeigt, die zu der Anwendung gehören, mit der Sie arbeiten.
Dies ist ein allgemeines Codebeispiel:
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