Sintomas
Ao executar código que utiliza a Automatização para controlar o Microsoft Excel, pode ocorrer um dos seguintes erros: No Microsoft Excel 97 e em versões posteriores do Excel, recebe uma das seguintes mensagens de erro:
Mensagem de erro 1
Erro de tempo de execução "1004": O método "<nome do método>" do objeto "_Global" falhou
Mensagem de erro 2
Erro definido pela aplicação ou definido pelo objeto
No Microsoft Excel 95, recebe uma das seguintes mensagens de erro:
Mensagem de erro 1
Erro de tempo de execução "-2147023174" Erro de Automatização OLE
Mensagem de erro 2
Erro de tempo de execução "462": O computador do servidor remoto não existe ou está indisponível.
Causa
O Visual Basic estabeleceu uma referência ao Excel devido a uma linha de código que chama um objeto, método ou propriedade do Excel sem qualificar o elemento com uma variável de objeto do Excel. 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
Para resolver este problema, modifique o código para que cada chamada para um objeto, método ou propriedade do Excel seja qualificada com a variável de objeto adequada.
Estado
Este comportamento é por predefinição.
Mais Informações
Para automatizar o Microsoft Excel, estabelece uma variável de objeto que normalmente se refere ao objeto Aplicação do Excel ou ao objeto Livro do Excel. Outras variáveis de objeto podem ser definidas para fazer referência a uma Folha de Cálculo, a um Intervalo ou a outros objetos no modelo de objetos do Microsoft Excel. Quando escreve código para utilizar um objeto, método ou propriedade do Excel, deve sempre preceder a chamada com a variável de objeto adequada. Se não o fizer, o Visual Basic estabelece a sua própria referência ao Excel. Esta referência pode causar problemas quando tenta executar o código de automatização várias vezes. Tenha em atenção que, mesmo que a linha de código comece com a variável de objeto, pode ser efetuada uma chamada para um objeto, método ou propriedade do Excel no meio da linha de código que não é precedida de uma variável de objeto.Os passos seguintes ilustram como reproduzir este problema e como corrigir o problema.
Passos para reproduzir o comportamento
-
Inicie um novo projeto EXE Standard no Visual Basic. O Formulário1 é criado por predefinição.
-
No menu Projeto , clique em Referências e, em seguida, verifique a Biblioteca de Objetos da versão do Excel que pretende automatizar.
-
Coloque um controlo CommandButton no Form1.
-
Copie o seguinte exemplo de código para a Janela de Código do Formulário1.
Option Explicit Private Sub Command1_Click() Dim xlApp As Excel.Application Dim xlBook As Excel.Workbook Dim xlSheet As Excel.Worksheet Set xlApp = CreateObject("Excel.Application") Set xlBook = xlApp.Workbooks.Add Set xlSheet = xlBook.Worksheets("Sheet1") xlSheet.Range(Cells(1, 1), Cells(10, 2)).Value = "Hello" xlBook.Saved = True Set xlSheet = Nothing Set xlBook = Nothing xlApp.Quit Set xlApp = Nothing End Sub -
No menu Executar , clique em Iniciar ou prima F5 para iniciar o programa.
-
Clique no controlo CommandButton . Não ocorre nenhum erro. No entanto, foi criada uma referência ao Excel e não foi lançada.
-
Clique novamente no controlo CommandButton . Repare que recebe uma das mensagens de erro que são abordadas na secção "Sintomas".Nota A mensagem de erro ocorre porque o código refere-se ao método da célula sem antes da chamada com o variável de objeto xlSheet.
-
Pare o projeto e altere a seguinte linha de código:
xlSheet.Range(Cells(1,1),Cells(10,2)).Value = "Hello"
Altere a linha de código para se assemelhar à seguinte linha de código.
xlSheet.Range(xlSheet.Cells(1,1),xlSheet.Cells(10,2)).Value = "Hello"
-
Execute o programa novamente. Repare que pode executar o código várias vezes sem receber uma mensagem de erro.
Referências
189618 Poderá receber a mensagem de erro "-2147023174" (800706ba)" ou "Erro de tempo de execução "462" quando executa o código do Visual Basic que utiliza a Automatização para controlar Word