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.
Weitere Links zum Thema
Word-Automatisierungsfehler vermeiden
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
Hinweise
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.

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


Download  (1,7 kB) Downloads bisher: [ 1827 ]

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: Freitag, 19. August 2011