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.
|
|
|
Ändern Sie den Code so, dass jeder Aufruf eines Word-Objekts, einer -Methode oder
-Eigenschaft durch die entsprechende Objektvariable definiert wird.
|
|
|
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)
|
|
|
|
|
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
|
|
|
|
|
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
|
|
|
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)
|
|
|
|
|
With objWDApp
.Selection.ParagraphFormat.SpaceBefore = .InchesToPoints(0.25)
End With
|
|
|
|
Teile dieses Artikels sind eine freie Übersetzung des englischsprachigen Artikels
der Microsoft Knowledge Base: |
189618 |
PRB: Automation Error Calling Unqualified Method or Property |
|
|
|