Problembeschreibung
Wenn Sie Microsoft Visual Basic-Code ausführen, der Automation zum Steuern von Microsoft Word verwendet, erhalten Sie möglicherweise eine der folgenden Fehlermeldungen:
Fehlermeldung 1
Laufzeitfehler "-2147023174" (800706ba)
Automatisierungsfehler
Fehlermeldung 2
Laufzeitfehler "462": Der Remoteservercomputer ist nicht vorhanden oder nicht verfügbar.
Ursache
Visual Basic hat aufgrund einer Codezeile, die ein Word Objekt, eine Methode oder eigenschaft aufruft, ohne sie mit einer Word Objektvariablen zu qualifizieren, einen Verweis auf Word eingerichtet. Visual Basic gibt diesen Verweis erst wieder frei, wenn Sie das Programm beenden. Dieser fehlerhafte Verweis beeinträchtigt automatisierungscode, wenn der Code mehrmals ausgeführt wird.
Lösung
Ändern Sie den Code so, dass jeder Aufruf eines Word -Objekts, -Methode oder -Eigenschaft mit der entsprechenden Objektvariablen qualifiziert wird.
Status
Es handelt sich hierbei um ein beabsichtigtes Verhalten.
Weitere Informationen
Um Word zu automatisieren, richten Sie eine Objektvariable ein, die in der Regel auf das Word Application- oder Document-Objekt verweist. Andere Objektvariablen können dann so festgelegt werden, dass sie auf eine Auswahl, einen Bereich oder andere Objekte im Word Objektmodell verweisen. Wenn Sie Code schreiben, um ein Word -Objekt, -Methode oder -Eigenschaft zu verwenden, sollten Sie dem Aufruf immer die entsprechende Objektvariable vorangehen. Andernfalls verwendet Visual Basic einen ausgeblendeten globalen Variablenverweis, der auf den aktuell ausgeführten instance festgelegt wird. Wenn Word heruntergefahren wird oder die deklarierte Objektvariable freigegeben wird, verweist die ausgeblendete globale Variable jetzt auf ein ungültiges (zerstörtes) Objekt. Beim erneuten Ausführen des Automatisierungscodes schlagen Aufrufe dieser ausgeblendeten Objektvariablen mit dem oben genannten Fehler fehl.
Die folgenden Schritte veranschaulichen, wie sie dieses Problem reproduzieren und beheben.
Schritte zum Reproduzieren des Verhaltens
-
Starten Sie ein neues Standard EXE-Projekt in Visual Basic. Form1 wird standardmäßig erstellt.
-
Klicken Sie im Menü Projekt auf Verweise, und klicken Sie dann auf eine der folgenden Optionen:
-
Klicken Sie für Office Word 2007 auf Microsoft Word 12.0-Objektbibliothek.
-
Klicken Sie Word 2003 auf Microsoft Word 11.0-Objektbibliothek.
-
Klicken Sie Word 2003 auf Microsoft Word 10.0-Objektbibliothek.
-
Klicken Sie für Word 2000 auf Microsoft Word 9.0-Objektbibliothek.
-
Klicken Sie für Word 97 auf Microsoft Word 8.0-Objektbibliothek.
-
-
Platzieren Sie ein CommandButton-Steuerelement auf Form1.
-
Kopieren Sie den folgenden Code in das Codefenster von Form1:
Option Explicit Private Sub Command1_Click() Dim oWord As Word.Application Dim oDoc As Word.Document Dim oRange as Word.Range Set oWord = CreateObject("Word.Application") With oWord .Visible = True .Activate .WindowState = wdWindowStateNormal End With Set oDoc = oWord.Documents.Add MsgBox "Document open", vbMsgBoxSetForeground With oDoc .PageSetup.LeftMargin = InchesToPoints(1.25) End With ' This example inserts text at the end of section one. Set oRange = ActiveDocument.Sections(1).Range With oRange .MoveEnd Unit:=wdCharacter, Count:= -1 .Collapse Direction:=wdCollapseEnd .InsertParagraphAfter .InsertAfter "End of section." End With With oDoc .Saved = True End With Set oRange = Nothing Set oDoc = Nothing oWord.Quit Set oWord = Nothing End Sub
-
Klicken Sie im Menü Ausführen auf Start , oder drücken Sie F5, um das Programm zu starten.
-
Klicken Sie auf commandButton. Es tritt kein Fehler auf. Es wurde jedoch ein Verweis auf Word erstellt und nicht freigegeben.
-
Klicken Sie erneut auf commandButton, und beachten Sie, dass der zuvor beschriebene Fehler angezeigt wird.
Hinweis Der Fehler tritt auf, weil der Code auf die InchesToPoints-Methode verweist, ohne dem Aufruf mit der oWord-Objektvariablen voran zu gehen. -
Beenden Sie das Projekt, und ändern Sie die folgende Zeile:
.PageSetup.LeftMargin = InchesToPoints(1.25)
-An-
.PageSetup.LeftMargin = oWord.InchesToPoints(1.25)
-
Führen Sie das Programm erneut aus. Klicken Sie dann auf commandButton. Es tritt kein Fehler auf.
-
Klicken Sie erneut auf commandButton, und beachten Sie, dass der Fehler angezeigt wird.
Hinweis Der Fehler tritt auf, weil der Code auf das Range-Objekt von ActiveDocument Section verweist, ohne dem Aufruf mit der oWord-Objektvariablen voran zu gehen. -
Beenden Sie das Projekt, und ändern Sie die folgende Zeile:
Set oRange = ActiveDocument.Sections(1).Range
-An-
Set oRange = oWord.ActiveDocument.Sections(1).Range
-
Führen Sie das Programm erneut aus. Beachten Sie, dass Sie den Code mehrmals ohne Fehler ausführen können.
Wenn Ihr Projekt beim Erstellen eines Visual Basic-Projekts zur Automatisierung von Word über einen Verweis auf die Microsoft Word-Objektbibliothek verfügt, ist Beispielcode für die Objekte, Methoden und Eigenschaften des Word-Objektmodells in der Word Hilfedatei verfügbar. Wenn sich der Cursor über einem Schlüsselwort in Ihrem Code befindet, sehen Sie den entsprechenden Hilfetext, indem Sie F1 drücken.
Der Beispielcode im Hilfethema ist der Microsoft Word Visual Basic for Applications-Code. Es werden nicht die Objektverweise angezeigt, die für Ihren Visual Basic-Code erforderlich sind. Sie müssen die Qualifizierer nach Bedarf hinzufügen.
Informationsquellen
Weitere Informationen finden Sie in den folgenden Artikeln in der Microsoft Knowledge Base:
178510 PRB: Excel-Automatisierungsmethode des Objekts "_Global" fehlgeschlagen
Weitere Informationen zur Automatisierung von Office-Anwendungen finden Sie in der folgenden Artikelnummer, um den Artikel in der Microsoft Knowledge Base anzuzeigen: