Simptome
Când se execută codul Microsoft Visual Basic care utilizează automatizare pentru a controla Microsoft Word, este posibil să primiți unul dintre următoarele mesaje de eroare:mesaj de eroare 1
Eroarea de automatizare '-2147023174 ' (800706ba din)
Mesaj de eroare 2
Eroarea Run-Time ' 462 ': computerul de la distanță nu există sau nu este disponibil
Cauză
Visual Basic a stabilit o referință la Word din cauza unei linii de cod care apelează un obiect, o metodă sau o proprietate Word fără a o califica cu o variabilă a obiectului Word. Visual Basic nu eliberează această referință până când nu terminați programul. Această referință rătăcitoare interferează cu codul de automatizare atunci când codul este rulat de mai multe ori.
Rezolvare
Modificați codul astfel încât fiecare apel către un obiect Word, o metodă sau o proprietate să fie calificat cu variabila de obiect corespunzătoare.
Stare
Acest comportament este proiectat.
Mai multe informații
Pentru a automatiza Word, stabiliți o variabilă de obiect care se referă de obicei la aplicația Word sau la obiectul document. Alte variabile de obiect pot fi setate pentru a face referire la o selecție, la o zonă sau la alte obiecte din modelul de obiecte Word. Atunci când scrieți cod pentru a utiliza un obiect Word, o metodă sau o proprietate, trebuie să precede întotdeauna apelul cu variabila de obiect corespunzătoare. Dacă nu faceți acest lucru, Visual Basic utilizează o referință variabilă globală ascunsă pe care o setează la instanța care se execută în prezent. Dacă Word este Shutdown sau dacă variabila obiect declarată este lansată, variabila globală ascunsă va face referire acum la un obiect nevalid (distrus). Atunci când se execută din nou codul de automatizare, apelurile la această variabilă de obiect ascuns nu vor reuși cu eroarea menționată anterior. Următorii pași ilustrează modul în care se reproduc această problemă și cum se corectează.
Pașii pentru reproducerea comportamentului
-
Porniți un nou proiect standard EXE în Visual Basic. Form1 este creat în mod implicit.
-
Faceți clic pe referințe din meniul Project , apoi faceți clic pe una dintre următoarele opțiuni:
-
Pentru Office Word 2007, faceți clic pe Microsoft word 12,0 Object Library
-
Pentru Word 2003, faceți clic pe Microsoft word 11,0 Object Library
-
Pentru Word 2003, faceți clic pe Microsoft word 10,0 Object Library
-
Pentru Word 2000, faceți clic pe Microsoft word 9,0 Object Library.
-
Pentru Word 97, faceți clic pe Microsoft word 8,0 Object Library.
-
-
Amplasați un CommandButton pe Form1.
-
Copiați următorul cod în fereastra codului din 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
-
În meniul rulare , faceți clic pe Start sau apăsați tasta F5 pentru a porni programul.
-
Faceți clic pe CommandButton. Nu apare nicio eroare. Cu toate acestea, a fost creată o referință la Word și nu a fost lansată.
-
Faceți clic pe CommandButton din nou și rețineți că primiți eroarea descrisă anterior.Notă Eroarea apare deoarece codul se referă la metoda InchesToPoints fără a preceda apelul cu variabila de obiect oWord.
-
Opriți proiectul și modificați următoarea linie:
.PageSetup.LeftMargin = InchesToPoints(1.25)
pentru a
.PageSetup.LeftMargin = oWord.InchesToPoints(1.25)
-
Rulează din nou programul. Apoi faceți clic pe CommandButton. Nu apare nicio eroare.
-
Faceți clic pe CommandButton din nou și rețineți că primiți eroarea.Notă Eroarea apare deoarece codul face referire la obiectul de zonă ActiveDocument din secțiunea One fără a preceda apelul cu variabila de obiect oWord.
-
Opriți proiectul și modificați următoarea linie:
Set oRange = ActiveDocument.Sections(1).Range
pentru a
Set oRange = oWord.ActiveDocument.Sections(1).Range
-
Rulează din nou programul. Rețineți că puteți executa codul de mai multe ori fără eroare.
Atunci când construiți un proiect Visual Basic care automatizează Word, dacă proiectul are o referință la biblioteca de obiecte Microsoft Word, codul eșantion pentru obiectele, metodele și proprietățile modelului Word Object este disponibil din fișierul Ajutor Word. Atunci când cursorul trece peste un cuvânt cheie din cod, veți vedea orice text de ajutor aplicabil, apăsând tasta F1. Codul eșantion din subiectul de ajutor va fi codul Microsoft Word Visual Basic for Applications. Nu va afișa referințele de obiect pe care le necesită codul Visual Basic. Va trebui să adăugați calificările, după cum este necesar.
Referințe
Pentru informații suplimentare, consultați următoarele articole din baza de cunoștințe Microsoft:
178510 PRB: metoda de automatizare Excel a obiectului ' _Global ' nu a reușit
167223 Fișier de ajutor pentru Microsoft Office 97 Automation disponibilPentru informații suplimentare despre automatizarea aplicațiilor Office, faceți clic pe numărul de articol de mai jos pentru a vedea articolul în baza de cunoștințe Microsoft:
222101 HOWTO: Găsirea și utilizarea documentației pentru modelul de obiecte Office