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.
|
|
|
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.)
|
|
|
|
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.
|
|
|
|
Microsoft Links zum Thema |
|
|