Sintomi
Quando si esegue codice Microsoft Visual Basic che usa l'automazione per controllare Microsoft Word, è possibile che venga visualizzato uno dei messaggi di errore seguenti:
Messaggio di errore 1
Errore di runtime '-2147023174' (800706ba)
Errore di automazione
Messaggio di errore 2
Errore di runtime '462': Il computer server remoto non esiste o non è disponibile
Causa
Visual Basic ha stabilito un riferimento a Word a causa di una riga di codice che chiama un oggetto, un metodo o una proprietà Word senza qualificarlo con una variabile oggetto Word. Visual Basic non rilascia questo riferimento finché non si termina il programma. Questo riferimento errante interferisce con il codice di automazione quando il codice viene eseguito più volte.
Risoluzione
Modificare il codice in modo che ogni chiamata a un oggetto, metodo o proprietà Word sia qualificata con la variabile oggetto appropriata.
Stato
Si tratta di un comportamento correlato alla progettazione del prodotto.
Ulteriori informazioni
Per automatizzare Word, è necessario stabilire una variabile oggetto che in genere fa riferimento all'oggetto Word Application o Document. Altre variabili oggetto possono quindi essere impostate in modo da fare riferimento a una selezione, un intervallo o altri oggetti nel modello a oggetti Word. Quando si scrive codice per usare un oggetto, un metodo o una proprietà Word, è consigliabile anteporre alla chiamata la variabile oggetto appropriata. In caso contrario, Visual Basic usa un riferimento a variabile globale nascosto che viene impostato sull'istanza attualmente in esecuzione. Se Word è in fase di arresto o se viene rilasciata la variabile oggetto dichiarata, la variabile globale nascosta farà ora riferimento a un oggetto non valido (eliminato). Quando si esegue di nuovo il codice di automazione, le chiamate a questa variabile oggetto nascosto avranno esito negativo con l'errore menzionato.
I passaggi seguenti illustrano come riprodurre il problema e come correggerlo.
Passaggi per riprodurre il comportamento
-
Avviare un nuovo progetto STANDARD EXE in Visual Basic. Form1 viene creato per impostazione predefinita.
-
Scegliere Riferimenti dal menu Progetto e quindi fare clic su una delle opzioni seguenti:
-
Per Office Word 2007, fare clic su Libreria oggetti di Microsoft Word 12.0
-
Per Word 2003, fare clic su Libreria oggetti di Microsoft Word 11.0
-
Per Word 2003, fare clic su Libreria oggetti di Microsoft Word 10.0
-
Per Word 2000, fare clic su Libreria oggetti di Microsoft Word 9.0.
-
Per Word 97, fare clic su Libreria oggetti di Microsoft Word 8.0.
-
-
Posizionare un pulsante CommandButton in Form1.
-
Copiare il codice seguente nella finestra del codice di 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
-
Nel menu Esegui fare clic su Start o premere F5 per avviare il programma.
-
Fare clic sul pulsante CommandButton. Non si verifica alcun errore. Tuttavia, è stato creato un riferimento a Word e non è stato rilasciato.
-
Fare di nuovo clic sul pulsante CommandButton e si noti che viene visualizzato l'errore descritto in precedenza.
Nota L'errore si verifica perché il codice fa riferimento al metodo InchesToPoints senza prima la chiamata con la variabile oggetto oWord. -
Interrompere il progetto e modificare la riga seguente:
.PageSetup.LeftMargin = InchesToPoints(1.25)
-A-
.PageSetup.LeftMargin = oWord.InchesToPoints(1.25)
-
Eseguire di nuovo il programma. Quindi, fare clic sul pulsante CommandButton. Non si verifica alcun errore.
-
Fare di nuovo clic sul pulsante CommandButton e si noti che viene visualizzato l'errore.
Nota L'errore si verifica perché il codice fa riferimento all'oggetto Range della sezione ActiveDocument senza prima la chiamata con la variabile oggetto oWord. -
Interrompere il progetto e modificare la riga seguente:
Set oRange = ActiveDocument.Sections(1).Range
-A-
Set oRange = oWord.ActiveDocument.Sections(1).Range
-
Eseguire di nuovo il programma. Si noti che è possibile eseguire il codice più volte senza errori.
Quando si crea un progetto Visual Basic per automatizzare Word, se il progetto contiene un riferimento alla libreria di oggetti di Microsoft Word, il codice di esempio per gli oggetti, i metodi e le proprietà del modello a oggetti Word è disponibile nel file della Guida di Word. Quando il cursore si trova su una parola chiave nel codice, vedrai il testo della Guida applicabile premendo F1.
Il codice di esempio nell'argomento della Guida sarà il codice Word Visual Basic, Applications Edition Microsoft. Non visualizzerà i riferimenti agli oggetti necessari per il codice Visual Basic. Sarà necessario aggiungere i qualificatori in base alle esigenze.
Riferimenti
Per ulteriori informazioni, vedere gli articoli seguenti nella Microsoft Knowledge Base:
178510 PRB: Excel Automation Method of Object '_Global'Failed
Per altre informazioni sull'automazione delle applicazioni di Office, fare clic sul numero dell'articolo seguente per visualizzare l'articolo della Microsoft Knowledge Base: