Symptom
När du kör Microsoft Visual Basic-kod som använder Automation för att styra Microsoft Word kan du få något av följande felmeddelanden:
Felmeddelande 1
Körningsfel 2147023174 (800706ba)
Automationsfel
Felmeddelande 2
Körningsfel 462: Fjärrserverdatorn finns inte eller är inte tillgänglig
Orsak
Visual Basic har upprättat en referens till Word på grund av en kodrad som anropar ett Word objekt, en metod eller en egenskap utan att kvalificera den med en Word objektvariabel. Visual Basic släpper inte den här referensen förrän du avslutar programmet. Den här felaktiga referensen stör automationskoden när koden körs mer än en gång.
Lösning
Ändra koden så att varje anrop till ett Word objekt, en metod eller egenskap är kvalificerad med rätt objektvariabel.
Status
Detta är avsiktligt.
Mer information
Om du vill automatisera Word skapar du en objektvariabel som vanligtvis refererar till Word-program- eller dokumentobjektet. Andra objektvariabler kan sedan ställas in för att referera till en markering, ett område eller andra objekt i den Word objektmodellen. När du skriver kod för att använda en Word objekt, metod eller egenskap ska du alltid föregå samtalet med rätt objektvariabel. Om du inte gör det använder Visual Basic en dold global variabelreferens som den anger till den instans som körs för närvarande. Om Word stängs av, eller om variabeln deklarerade objekt släpps, refererar den dolda globala variabeln nu till ett ogiltigt (förstört) objekt. När du kör automationskoden igen misslyckas anrop till den här dolda objektvariabeln med ovan nämnda fel.
Följande steg visar hur du återskapar det här problemet och hur du korrigerar det.
Steg för att reproducera beteende
-
Starta ett nytt Standard EXE-projekt i Visual Basic. Formulär1 skapas som standard.
-
Klicka på Referenser på Projekt-menyn och klicka sedan på något av följande alternativ:
-
För Office Word 2007 klickar du på Microsoft Word 12.0-objektbibliotek
-
För Word 2003 klickar du på Microsoft Word 11.0-objektbibliotek
-
För Word 2003 klickar du på Microsoft Word 10.0-objektbibliotek
-
För Word 2000 klickar du på Microsoft Word 9.0-objektbibliotek.
-
För Word 97 klickar du på Microsoft Word 8.0-objektbibliotek.
-
-
Placera en CommandButton på Formulär1.
-
Kopiera följande kod till kodfönstret i formulär1:
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
-
På menyn Kör klickar du på Start eller trycker på F5 för att starta programmet.
-
Klicka på Kommandoknapp. Inga fel uppstår. En referens till Word har dock skapats och har inte släppts.
-
Klicka på CommandButton igen och observera att du får felet som beskrivits tidigare.
Obs! Felet uppstår eftersom koden refererar till InchesToPoints-metoden utan att föregå samtalet med oWord-objektvariabeln. -
Stoppa projektet och ändra följande rad:
.PageSetup.LeftMargin = InchesToPoints(1.25)
-Att-
.PageSetup.LeftMargin = oWord.InchesToPoints(1.25)
-
Kör programmet igen. Klicka sedan på Kommandoknapp. Inga fel uppstår.
-
Klicka på Kommandoknappen igen och observera att du får felet.
Obs! Felet uppstår eftersom koden refererar till Objektet Område i ActiveDocument-avsnitt utan att föregå samtalet med oWord-objektvariabeln. -
Stoppa projektet och ändra följande rad:
Set oRange = ActiveDocument.Sections(1).Range
-Att-
Set oRange = oWord.ActiveDocument.Sections(1).Range
-
Kör programmet igen. Observera att du kan köra koden flera gånger utan fel.
När du skapar ett Visual Basic-projekt som automatiserar Word, om projektet har en referens till Microsoft Word-objektbiblioteket, är exempelkod för objekt, metoder och egenskaper för Word-objektmodellen tillgänglig från Word-hjälpfilen. När markören är över ett nyckelord i koden visas eventuell hjälptext genom att trycka på F1-tangenten.
Exempelkoden i hjälpavsnittet är Koden för Microsoft Word Visual Basic for Applications. Objektreferenserna som krävs för Visual Basic-koden visas inte. Du måste lägga till avgränsarna efter behov.
Referenser
Mer information finns i följande artiklar i Microsoft Knowledge Base:
178510 PRB: Excel Automation Method of Object '_Global'Failed
Om du vill ha mer information om Automatisering av Office-program klickar du på artikelnumret nedan för att visa artikeln i Microsoft Knowledge Base: