Sintomas
Quando executa o código do Microsoft Visual Basic que utiliza a Automatização para controlar o Microsoft Word, poderá receber uma das seguintes mensagens de erro:
Mensagem de erro 1
Erro de tempo de execução "-2147023174" (800706ba)
Erro de automatização
Mensagem de erro 2
Erro de tempo de execução "462": A máquina do servidor remoto não existe ou não está disponível
Causa
O Visual Basic estabeleceu uma referência a Word devido a uma linha de código que chama um objeto, método ou propriedade Word sem qualificá-lo com uma variável de objeto Word. O Visual Basic não lança esta referência até terminar o programa. Esta referência errante interfere com o código de automatização quando o código é executado mais do que uma vez.
Resolução
Modifique o código para que cada chamada para um objeto, método ou propriedade Word seja qualificado com a variável de objeto adequada.
Estado
Este comportamento é por predefinição.
Mais Informações
Para automatizar Word, estabelece uma variável de objeto que normalmente se refere ao objeto Aplicação Word ou Documento. Outras variáveis de objeto podem então ser definidas para fazer referência a uma Seleção, um Intervalo ou outros objetos no modelo de objeto Word. Quando escreve código para utilizar um objeto, método ou propriedade Word, deve sempre preceder a chamada com a variável de objeto adequada. Se não o fizer, o Visual Basic utiliza uma referência de variável global oculta que define para a instância atualmente em execução. Se Word for encerrado ou se a variável de objeto declarado for libertada, a variável global oculta irá agora referenciar um objeto inválido (destruído). Ao executar novamente o código de automatização, as chamadas para esta variável de objeto oculto falharão com o erro acima mencionado.
Os passos seguintes ilustram como reproduzir este problema e como corrigi-lo.
Passos para Reproduzir Comportamento
-
Inicie um novo projeto EXE Standard no Visual Basic. O Formulário1 é criado por predefinição.
-
Clique em Referências no menu Projeto e, em seguida, clique numa das seguintes opções:
-
Para o Office Word 2007, clique em Biblioteca de Objetos do Microsoft Word 12.0
-
Para Word 2003, clique em Biblioteca de Objetos do Microsoft Word 11.0
-
Para Word 2003, clique em Biblioteca de Objetos do Microsoft Word 10.0
-
Para Word 2000, clique em Biblioteca de Objetos do Microsoft Word 9.0.
-
Para Word 97, clique em Biblioteca de Objetos do Microsoft Word 8.0.
-
-
Coloque um CommandButton no Form1.
-
Copie o seguinte código para a Janela de Código do Formulário1:
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
-
No menu Executar , clique em Iniciar ou prima a tecla F5 para iniciar o programa.
-
Clique no CommandButton. Não ocorre nenhum erro. No entanto, foi criada uma referência a Word e não foi lançada.
-
Clique novamente no CommandButton e tenha em atenção que recebe o erro descrito anteriormente.
Nota O erro ocorre porque o código refere-se ao Método InchesToPoints sem preceder a chamada com a variável de objeto oWord. -
Pare o projeto e altere a seguinte linha:
.PageSetup.LeftMargin = InchesToPoints(1.25)
-to-
.PageSetup.LeftMargin = oWord.InchesToPoints(1.25)
-
Execute o programa novamente. Em seguida, clique no CommandButton. Não ocorre nenhum erro.
-
Clique novamente no CommandButton e tenha em atenção que recebe o erro.
Nota O erro ocorre porque o código refere-se ao objeto Intervalo da Secção ActiveDocument, sem antes da chamada com a variável de objeto oWord. -
Pare o projeto e altere a seguinte linha:
Set oRange = ActiveDocument.Sections(1).Range
-to-
Set oRange = oWord.ActiveDocument.Sections(1).Range
-
Execute o programa novamente. Tenha em atenção que pode executar o código várias vezes sem erros.
Ao criar um projeto do Visual Basic que automatiza Word, se o seu projeto tiver uma referência à Biblioteca de Objetos do Microsoft Word, o código de exemplo para os objetos, métodos e propriedades do Modelo de Objeto Word está disponível a partir do ficheiro Word Ajuda. Quando o cursor estiver sobre uma palavra-chave no seu código, verá qualquer texto de Ajuda aplicável premindo a tecla F1.
O código de exemplo no tópico ajuda será o código do Microsoft Word Visual Basic for Applications. Não mostrará as referências de objeto necessárias para o código do Visual Basic. Terá de adicionar os qualificadores conforme adequado.
Referências
Para obter informações adicionais, consulte os seguintes artigos na Base de Dados de Conhecimento Microsoft:
178510 PRB: O Método de Automatização do Objeto '_Global' do Excel falhou
Para obter informações adicionais sobre a Automatização de aplicações do Office, clique no número do artigo abaixo para ver o artigo na Base de Dados de Conhecimento Microsoft: