Tipp 0413 Automation mit Office-Anwendungen
Autor/Einsender:
Datum:
  Angie
29.08.2004
Entwicklungsumgebung:   VB/VBA
Bei der Automation von Office-Anwendungen kann die entsprechenden Objektbibliothek mittels Verweis in die Client-Anwendung eingebunden werden, oder aber zur Laufzeit eine Objektinstanz erstellt werden. Wird die Objektbibliothek in das Projekt eingebunden, spricht man von Early Binding, ohne Verweis von Late Binding.
Early Binding
Bei Early Binding wird ein Verweis auf die zu verwendende Objektbibliothek eingebunden, und alle Objekte mit den entsprechenden Objekttypen definiert.
Vorteile
 - Schnellere Ausführung des Codes.
 - Der Client-Anwendung sind alle Objekte, Methoden und Eigenschaften der Server-Anwendung bekannt.
 - In der Entwicklungsphase kann man die Vorteile des IntelliSense nutzen, auch die Microsoft VB(A)-Hilfe inkl. Beispiele steht zur Verfügung.
Nachteile
 - Eventuelle Versionsprobleme
  Wenn Sie sich für Early Binding entscheiden, dann sollten Sie in Ihrem Projekt einen Verweis auf die niedrigste Version des Office-Produkts einbinden, das auf dem Zielsystem vorhanden sein könnte.
  Wenn Sie beispielsweise die Word XP-Objektbibliothek als Verweis einbinden und das Programm an einen Kunden ausliefern, auf dessen Rechner aber nur Word 2000 oder Word 97 installiert ist, erhält er beim Ausführen des Programms eine Fehlermeldung.
Beispiel für Early Binding für Microsoft Word
Für die Ausführung des Codes muss zur Entwurfszeit die Microsoft Word x.0 Object Library in das Projekt eingebunden werden.
 
Sub Demo_EarlyBinding()

1:   Dim objWDApp   As Word.Application
2:   Dim objWDDoc   As Word.Document

3:   Set objWDApp = CreateObject("Word.Application")
4:   With objWDApp
5:     .Visible = True
6:     .Activate
7:     .WindowState = wdWindowStateNormal
8:   End With

9:   Set objWDDoc = objWDApp.Documents.Add
10:  MsgBox "Dokument erstellt!", vbMsgBoxSetForeground

11:  With objWDDoc
12:    .Saved = True
'13:    .Close
14:  End With

15:  Set objWDDoc = Nothing

'16:  objWDApp.Quit
17:  Set objWDApp = Nothing

End Sub
'(Die Codezeilen 13 und 16 wurden auskommentiert, damit Word
' und das in Word geöffnete Dokument sichtbar bleiben.)
 
Late Binding
Bei Late Binding wird zur Entwurfszeit kein Verweis auf eine Objektbibliothek in das Projekt eingebunden. Alle verwendeten Objekte werden mit dem Variablentyp Object definiert.
Ggf. verwendete anwendungsspezifische Konstanten müssen mit dem entsprechenden numerischen Äquivalent der Konstante ersetzt werden, könnten aber auch mit der Const-Anweisung deklariert werden. Die Verwendung von Konstanten erleichtert das Dokumentieren und Modifizieren Ihrer Programme, und trägt auch zur besseren Lesbarkeit des Codes bei.
Vorteile
 - Das mögliche Auftreten von Versionsproblemen ist etwas geringer.
  Die Aussage "Keine Versionsprobleme" wäre etwas zu gewagt, da es durchaus zu Fehlern kommen kann, unter anderem wenn Objekte, Methoden und Eigenschaften verwendet werden, die nicht in allen Versionen zur Verfügung stehen und/oder nicht den selben Syntax haben.
Nachteile
 - Langsamere Ausführung des Codes.
 - Der Client-Anwendung sind die Objekte, Methoden und Eigenschaften der Server-Anwendung nicht bekannt.
Tipp bei der Verwendung von Late Binding
Um während der Entwicklungsphase die Vorteile von Early Binding nutzen zu können, können Sie einen Verweis auf die Objektbibliothek einbinden, und vor der Verteilung des Programms den Verweis entfernen, alle verwendeten Objekte mit dem Variablentyp Object definieren und die anwendungsspezifischen Konstanten mit dem entsprechenden numerischen Äquivalent ersetzen.
Beispiele für Late Binding für Microsoft Word
Für die Ausführung der beiden folgenden Beispiele muss zur Entwurfszeit kein Verweis auf die Objektbibliothek in das Projekt eingebunden werden.
Beispiel 1
Die verwendeten Objekte wurden mit dem Variablentyp Object definiert und die Word-spezifische Konstante wdWindowStateNormal in Codezeile 7 mit dem entsprechenden numerischen Äquivalent ersetzt.
 
Sub Demo_LateBinding1()

1:   Dim objWDApp   As Object
2:   Dim objWDDoc   As Object

3:   Set objWDApp = CreateObject("Word.Application")
4:   With objWDApp
5:     .Visible = True
6:     .Activate
7:     .WindowState = 0
8:   End With

9:   Set objWDDoc = objWDApp.Documents.Add
10:  MsgBox "Dokument erstellt!", vbMsgBoxSetForeground

11:  With objWDDoc
12:    .Saved = True
'13:    .Close
14:  End With

15:  Set objWDDoc = Nothing

'16:  objWDApp.Quit
17:  Set objWDApp = Nothing

End Sub
'(Die Codezeilen 13 und 16 wurden auskommentiert, damit Word
' und das in Word geöffnete Dokument sichtbar bleiben.)
 
Beispiel 2
Die verwendeten Objekte wurden mit dem Variablentyp Object definiert und die Word-spezifische Konstante mit der Const-Anweisung deklariert. Die Verwendung von Konstanten erleichtert das Dokumentieren und Modifizieren Ihrer Programme, und trägt auch zur besseren Lesbarkeit des Codes bei.
 
Const wdWindowStateNormal = 0

Sub Demo_LateBinding2()

1:   Dim objWDApp   As Object
2:   Dim objWDDoc   As Object

3:   Set objWDApp = CreateObject("Word.Application")
4:   With objWDApp
5:     .Visible = True
6:     .Activate
7:     .WindowState = wdWindowStateNormal
8:   End With

9:   Set objWDDoc = objWDApp.Documents.Add
10:  MsgBox "Dokument erstellt!", vbMsgBoxSetForeground

11:  With objWDDoc
12:    .Saved = True
'13:    .Close
14:  End With

15:  Set objWDDoc = Nothing

'16:  objWDApp.Quit
17:  Set objWDApp = Nothing

End Sub
'(Die Codezeilen 13 und 16 wurden auskommentiert, damit Word
' und das in Word geöffnete Dokument sichtbar bleiben.)
 
Early Binding oder Late Binding?
Die Antwort zu dieser Frage hängt sehr viel vom Projekt selbst ab. Microsoft empfiehlt in fast allen Fällen die Verwendung von Early Binding.
Weitere Links zum Thema
Word-Anwendung starten und beenden
Word-Automatisierungsfehler vermeiden
Excel-Automatisierungsfehler vermeiden
Microsoft Links zum Thema
INFO: GetObject and CreateObject Behavior of Office Automation Servers
INFO: Using Early Binding and Late Binding in Automation
INFO: Use DISPID Binding to Automate Office Applications Whenever Possible
INFO: Writing Automation Clients for Multiple Office Versions
PRB: Office 97 Automation Client Fails After Re-compilation with Office 2000 or Later Type Library
OFF97: Exception Error When You Reference Application Object on a Microsoft Windows NT 4.0-based Computer

Windows-Version
95
98/SE
ME
NT
2000
XP
Vista
Win 7
VB-Version
VBA 5
VBA 6
VB 4/16
VB 4/32
VB 5
VB 6


Vorheriger Tipp Zum Seitenanfang Nächster Tipp

Startseite | Projekte | Tutorials | API-Referenz | VB-/VBA-Tipps | Komponenten | Bücherecke | VB/VBA-Forum | VB.Net-Forum | DirectX-Forum | Foren-Archiv | DirectX | VB.Net-Tipps | Chat | Spielplatz | Links | Suchen | Stichwortverzeichnis | Feedback | Impressum

Seite empfehlen Bug-Report
Letzte Aktualisierung: Samstag, 9. Juli 2011