Tipp 0028
|
Word-Anwendung starten und beenden
|
|
|
Autor/Einsender: Datum: |
|
Angie 18.02.2005 (Update) |
|
Entwicklungsumgebung: |
|
VB/VBA |
|
|
Es gibt verschiedene Möglichkeiten eine neue Word-Instanz per Automation zu erstellen,
hier wird jedoch nur auf die Verwendung des Schlüsselworts New und der
CreateObject-Funktion eingegangen.
|
Um die folgenden Beispiele ausführen zu können, muss zur Entwurfszeit die
Microsoft Word x.0 Object Library in das in das VB- bzw. VBA-Projekt
eingebunden werden.
|
|
Verwendung des Schlüsselworts New bei der Deklaration der Objektvariablen
|
|
Oft gesehen, aber meines Erachtens bei der Automation von Word nicht zu empfehlen,
ist die Verwendung des Schlüsselworts New bei der Deklaration der Objektvariablen.
|
Das Schlüsselwort New ermöglicht das implizite Erstellen eines Objekts. Wenn Sie
New bei der Deklaration der Objektvariablen verwenden, wird eine neue Instanz des
Objekts auf Grund des ersten Verweises darauf erstellt, so dass Sie die
Set-Anweisung für die Zuweisung des Objektverweises nicht verwenden müssen.
Die so erstellte Word-Instanz kann nicht beendet werden, der Objektverweis lässt sich auch
nicht aus dem Speicher entfernen!
|
In folgendem Beispiel wird eine neue Word-Instanz erstellt und die Word-Anwendung kurz
angezeigt (2). Normalerweise würde man erwarten, dass mit der enthaltenen
Quit-Anweisung (3) die Word-Instanz beendet wird. Dies ist jedoch nicht der
Fall, die Word-Instanz wird für den Anwender lediglich "unsichtbar" und ist nach wie vor im
Windows-Task-Manager unter Prozesse aufgelistet. Auch der Versuch, die Verbindung der
Objektvariablen objWDApp zum zugehörigen Objekt aufzuheben, in dem
dieser der Wert Nothing zugewiesen wird (4), gelingt nicht.
Die Codezeilen 3 und 4 sind hier also wirkungslos!
|
Hinweis
Bevor Sie folgendes Beispiel ausführen, sollten Sie vorsichtshalber ggf. bereits
laufende Word-Instanzen beenden, damit beim "Killen" der so erstellten Word-Instanz nicht
versehentlich eine Instanz beendet wird, die eigentlich nicht beendet werden soll.
|
|
|
1: Dim objWDApp As New Word.Application
2: objWDApp.Visible = True
3: objWDApp.Quit
4: Set objWDApp = Nothing
|
|
|
Um die mit obigem Code erstellte Word-Instanz zu beenden, kann man entweder die Anwendung
(winword.exe) im Task-Manager manuell "killen" oder aber mit folgendem Code beenden.
Hier wird davon ausgegangen, dass vor Ausführung des obigen Codes keine andere Word-Instanz
ausgeführt wurde!
|
|
|
1: Dim objWDApp As Word.Application
2: On Error Resume Next
3: Set objWDApp = GetObject(, "Word.Application")
4: If Err.Number = 0 Then
5: objWDApp.Quit
6: Set objWDApp = Nothing
7: End If
8: On Error GoTo 0
|
|
|
Verwendung des Schlüsselworts New mit der Set-Anweisung
|
|
Das Schlüsselwort New ermöglicht das implizite Erstellen eines Objekts. Wenn Sie
New in Verbindung mit der Set-Anweisung verwenden, wird eine neue
Instanz der Klasse erstellt. Die so erstellte Word-Instanz kann beendet werden, und auch der
Objektverweis lässt sich aus dem Speicher entfernen.
|
In folgendem Beispiel wird eine neue Word-Instanz erstellt (2), die Word-Anwendung kurz
angezeigt (3) und anschließend "ordnungsgemäß" beendet (4). Auch der Objektverweis wird
aus dem Speicher entfernt (5).
|
|
|
1: Dim objWDApp As Word.Application
2: Set objWDApp = New Word.Application
3: objWDApp.Visible = True
4: objWDApp.Quit
5: Set objWDApp = Nothing
|
|
|
Verwendung der CreateObject-Funktion
|
|
Die CreateObject-Funktion erstellt und gibt einen Verweis auf ein
ActiveX-Objekt (hier die Word-Anwendung) zurück. Das Resultat des folgenden Beispiels
ist identisch mit Beispiel 2, ist jedoch unmerklich langsamer in der Ausführung.
|
|
|
1: Dim objWDApp As Word.Application
2: Set objWDApp = CreateObject("Word.Application")
3: objWDApp.Visible = True
4: objWDApp.Quit
5: Set objWDApp = Nothing
|
|
|
Word-Anwendung mit dem Schlüsselwort New oder der CreateObject-Funktion starten? |
|
Microsoft empfiehlt die Verwendung des Schlüsselworts New, wenn Early Binding
(frühes Binden) möglich ist, siehe dazu unseren Tipp
Automation mit Office-Anwendungen.
|
|
|
|
Microsoft Links zum Thema |
|
188546 |
BUG: Starting Word Manually Uses Same Instance as Automation |
288902 |
INFO: GetObject and CreateObject Behavior of Office Automation Servers |
SF7A4 |
Early and Late Binding |
|
|
Die im Download befindliche *.bas-Datei kann im jeweiligen Programm
im VB-Editor importiert werden.
|
Um diesen Tipp ausführen zu können, muss die Microsoft Word x.0 Object Library
in das VB- bzw. VBA-Projekt als Verweis eingebunden werden.
|
|