Tipp 0412 Word-Automatisierungsfehler vermeiden
Autor/Einsender:
Datum:
  Angie
29.08.2004
Entwicklungsumgebung:   VB/VBA
Bei der Automation von Word 97, 2000 und XP kann es unter anderem zu einer der folgenden Fehlermeldungen kommen:
 
  Laufzeitfehler '-2147023174' (800706ba)
  Automatisierungsfehler

- oder -

  Laufzeitfehler '462':
  Der Remote-Server-Computer existiert nicht oder ist
  nicht verfügbar.
 
Ursache der Fehlermeldungen
Auf Grund eines Zugriffs auf ein Word-Objekt, eine -Methode oder -Eigenschaft ohne einen gültigen Objektverweis, hat Visual Basic einen Verweis zu Word eingerichtet, der erst wieder freigegeben wird, wenn das Programm beendet wird. Dieser fehlerhafte Verweis verursacht die obigen Fehlermeldungen, wenn der Code mehr als einmal ausgeführt wird.
Problemlösung
Ändern Sie den Code so, dass jeder Aufruf eines Word-Objekts, einer -Methode oder -Eigenschaft durch die entsprechende Objektvariable definiert wird.
Weitere Informationen
Zur Automation von Microsoft Word legen Sie Objektvariablen fest, die normalerweise auf das Application-Objekt (Word-Anwendung) und auf ein Document-Objekt (Dokument) verweisen. Selbstverständlich können auch weitere Objektvariablen festgelegt werden, die beispielsweise auf eine Auswahl (Selection), einen Bereich (Range) oder andere Objekte im Word-Objektmodell verweisen.
Wenn im Code ein Word-Objekt, eine -Methode oder -Eigenschaft verwendet wird, sollte der Aufruf nur in Verbindung mit einer entsprechenden Objektvariable erfolgen. Fehlt diese Objektvariable, legt Visual Basic eine verborgene globale Variable für die aktuell ausgeführte Instanz fest.
Wird Word beendet oder die deklarierte Objektvariable freigegeben, verweist die verborgene globale Variable auf ein ungültiges (zerstörtes) Objekt. Bei erneutem Ausführen des Automatisierungscodes, schlagen Aufrufe zu der verborgenen Objektvariable fehl.
Beispiel mit fehlerhaftem Code
Mit folgendem Beispiel kann der Fehler reproduziert werden.
Für die Ausführung des Codes muss zur Entwurfszeit die entsprechende Microsoft Word x.0 Object Library in das Projekt eingebunden werden.
 
Sub Demo_WordAutomationError()

1:   Dim objWDApp   As Word.Application
2:   Dim objWDDoc   As Word.Document
3:   Dim objWDRange As Word.Range

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

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

12:  With objWDDoc
13:    .PageSetup.LeftMargin = InchesToPoints(1)
14:  End With

15:  Set objWDRange = ActiveDocument.Sections(1).Range
16:  With objWDRange
17:    .MoveEnd Unit:=wdCharacter, Count:=-1
18:    .Collapse Direction:=wdCollapseEnd
19:    .InsertParagraphAfter
20:    .InsertAfter "End of section."
21:  End With
22:  Set objWDRange = Nothing

23:  With objWDDoc
24:    .Saved = True
25:    .Close
26:  End With

27:  Set objWDDoc = Nothing

28:  objWDApp.Quit
29:  Set objWDApp = Nothing

End Sub
 
Führen Sie die Prozedur das erste Mal aus, tritt kein Fehler auf. Es wurde jedoch auf Grund fehlender Objektkennzeichner in den Codezeilen 13 und 15 ein Verweis zu Word erstellt, der nicht wieder freigegeben wurde.
Bei erneutem Aufruf der Prozedur tritt der oben beschriebene Fehler zuerst in Codezeile 13 auf und anschließend in Codezeile 15 auf.
In Codezeile 13 wird auf die InchesToPoints-Methode des Application-Objekts verwiesen, jedoch ohne der Objektvariablen objWDApp.
Ändern Sie
 
13:  .PageSetup.LeftMargin = InchesToPoints(1)
 
- in -
 
13: .PageSetup.LeftMargin = objWDApp.InchesToPoints(1)
 
In Codezeile 15 wird auf den ersten Abschnitt im aktiven Dokument (ActiveDocument) verwiesen, jedoch ohne der Objektvariablen objWDApp (Application-Objekt).
Ändern Sie
 
15: Set objWDRange = ActiveDocument.Sections(1).Range
 
- in -
 
15: Set objWDRange = objWDApp.ActiveDocument.Sections(1).Range
 
- oder, nachdem ein Objektverweis auf das Dokument vorhanden ist, noch besser in -
 
15: Set objWDRange = objWDDoc.Sections(1).Range
 
Nach Änderung der Codezeilen 13 und 15 kann die Prozedur immer wieder fehlerfrei ausgeführt werden
Word-VB(A)-Hilfe
Wurde im Projekt ein Verweis auf die Microsoft Word x.0 Object Library gesetzt, stehen die Beispiele für die Objekte, Methoden und Eigenschaften des Word-Objektmodells in der Word-VB(A)-Hilfe-Datei zur Verfügung. Befindet sich der Cursor im Code in einem Schlüsselwort, kann die Hilfe mit der Taste [F1] aufgerufen werden.
Die Beispiele in den Hilfethemen sind jedoch für Word VBA (Visual Basic for Applications) und müssen für die Automation von Word mit den entsprechenden Objektkennzeichnern ergänzt werden.
Beispiel InchesToPoints-Methode in der Word-VB(A)-Hilfe
 
Selection.ParagraphFormat.SpaceBefore = InchesToPoints(0.25)
 
Beispiel für die Automation von Word
(in Anlehnung an die Objektvariablen in obigem Beispiel)
 
objWDApp.Selection.ParagraphFormat.SpaceBefore = _
         objWDApp.InchesToPoints(0.25)
 
- oder besser noch -
 
With objWDApp
  .Selection.ParagraphFormat.SpaceBefore = .InchesToPoints(0.25)
End With
 
Hinweis
Teile dieses Artikels sind eine freie Übersetzung des englischsprachigen Artikels der Microsoft Knowledge Base:
189618 PRB: Automation Error Calling Unqualified Method or Property
Weitere Links zum Thema
Automation mit Office-Anwendungen

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: Freitag, 15. Juli 2011