Sintomas
Ao executar o código que usa a Automação para controlar o Microsoft Excel, um dos seguintes erros pode ocorrer:
No Microsoft Excel 97 e em versões posteriores do Excel, você recebe uma das seguintes mensagens de erro:
Mensagem de erro 1
Erro em tempo de execução '1004':
Falha no método '<nome do método>' do objeto '_Global'
Mensagem de erro 2
Erro definido por objeto ou definido por aplicativo
No Microsoft Excel 95, você recebe uma das seguintes mensagens de erro:
Mensagem de erro 1
Erro de tempo de execução '-2147023174'
Erro de Automação OLE
Mensagem de erro 2
Erro de tempo de execução '462':
O computador de servidor remoto não existe ou não está disponí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 libera essa referência até que você termine o programa. Essa referência errante interfere no código de automação quando o código é executado mais de uma vez.
Resolução
Para resolve esse 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 apropriada.
Status
Este é o comportamento padrão.
Informações adicionais
Para automatizar o Microsoft Excel, você estabelece uma variável de objeto que geralmente se refere ao objeto Aplicativo do Excel ou ao objeto Workbook do Excel. Em seguida, outras variáveis de objeto podem ser definidas para se referir a uma Planilha, um Intervalo ou outros objetos no modelo de objeto do Microsoft Excel. Ao escrever código para usar um objeto, método ou propriedade do Excel, você sempre deve preceder a chamada com a variável de objeto apropriada. Se você não fizer isso, o Visual Basic estabelecerá sua própria referência ao Excel. Essa referência pode causar problemas ao tentar executar o código de automação várias vezes. Observe que, mesmo que a linha de código comece com a variável de objeto, uma chamada pode ser feita 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.
As etapas a seguir ilustram como reproduzir esse problema e como corrigir o problema.
Etapas para reproduzir o comportamento
-
Inicie um novo projeto STANDARD EXE no Visual Basic. O Form1 é criado por padrão.
-
No menu Projeto, clique em Referências e, em seguida, marcar a Biblioteca de Objetos para a versão do Excel que você pretende automatizar.
-
Coloque um controle CommandButton no Form1.
-
Copie o exemplo de código a seguir 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 pressione F5 para iniciar o programa.
-
Clique no controle CommandButton . Não ocorre nenhum erro. No entanto, uma referência ao Excel foi criada e não foi lançada.
-
Clique no controle CommandButton novamente. Observe que você recebe uma das mensagens de erro que são discutidas na seção "Sintomas".
Observação A mensagem de erro ocorre porque o código se refere ao método da célula sem preceder a 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 à linha de código a seguir.
xlSheet.Range(xlSheet.Cells(1,1),xlSheet.Cells(10,2)).Value = "Hello"
-
Execute o programa novamente. Observe que você pode executar o código várias vezes sem receber uma mensagem de erro.
Referências
189618 Você pode receber a mensagem de erro "Erro de tempo de execução '-2147023174' (800706ba)" ou o "erro de tempo de execução '462'" ao executar o código do Visual Basic que usa Automação para controlar Word