Quando você usa o operador
Novo ou a função
CreateObject no Microsoft Visual Basic para criar uma instância de um
aplicativo do Microsoft Office, você pode receber a seguinte mensagem de erro:
Erro em tempo de execução '429': O componente ActiveX
não consegue criar o objeto
Esse erro ocorre quando o objeto de
automação requisitado não pode ser criado pelo COM e portanto não está
disponível para o Visual Basic. O erro é geralmente visto em alguns
computadores.
Este artigo fornece algumas dicas de solução de
problemas para ajudá-lo a diagnosticar e resolver problemas comuns conhecidos
por causar esse erro.
Ao contrário de alguns erros do Visual Basic, não existe um
motivo único que cause o erro 429. O problema acontece por causa de um erro no
aplicativo ou na configuração do sistema ou por causa da falta de um componente
ou de um componente danificado. Encontrar a causa exata é uma questão de
eliminar possibilidades. Se você encontrar esse erro no computador de um
cliente, existem vários itens que você precisa verificar para isolar e resolver
esse erro.
Os itens passam algumas sugestões práticas para solucionar
esse erro ao trabalhar com aplicativos do Office. Algumas dessas informações
também podem se aplicar a servidores que não são Office COM, mas este artigo
pressupõe que você está tentando automatizar o Microsoft Office.
Como verificar o código
O primeiro lugar para começar a procurar onde está o problema é
no código. Antes de solucionar o erro, é preciso saber onde ele está ocorrendo.
Tente encontrar o erro numa única linha do código.
Quando encontrar o
código que está falhando, tente fazer o seguinte:
- Certifique-se de que o código use criação explícita de
objeto. Qualquer problema pode ser identificado com mais facilidade se for
afunilado numa única ação. Por exemplo, não faça o seguinte:
Application.Documents.Add 'DON'T USE THIS!!
ou:
Dim oWordApp As New Word.Application 'DON'T USE THIS!!
'... some other code
oWordApp.Documents.Add
Ambos os métodos usam criação implícita de objeto. O Microsoft Word não
é iniciado até que a variável seja chamada pelo menos uma vez. Como a variável
pode ser chamada em partes diferentes do programa, isso pode dificultar a
localização do problema. Além disso, não está claro se o problema está em criar
o objeto do aplicativo ou do documento.
Em vez disso, faça chamadas
explícitas para criar cada objeto separadamente:
Dim oWordApp As Word.Application
Dim oDoc As Word.Document
Set oWordApp = CreateObject("Word.Application")
'... some other code
Set oDoc = oWordApp.Documents.Add
Isso facilita o isolamento do problema e deixa o código mais
legível. - Ao criar uma instância de um aplicativo do Microsoft
Office, use CreateObject em vez de Novo. CreateObject mapeia mais de perto o processo de criação usado pela maioria dos
clientes do Visual C++ e permite alterações no CLSID do servidor entre versões.
CreateObject pode ser usado tanto com o objeto de vínculo anterior quanto com
o objeto de vínculo posterior.
- Verifique se a linha ProgID passada para CreateObject está correta e se não depende da versão (ou seja, usam
"Excel.Application" em vez de "Excel.Application.8"). Pode ser que o sistema
que está falhando tenha uma versão mais antiga ou mais nova do Microsoft Office
do que a versão que você especificou em ProgID.
- Para ajudar a depurar aplicativos que não podem ser
executados em IDE, use o comando Erl para relatar o número da linha que falha. Por exemplo, o seguinte
código dirá qual objeto de automação não pode ser criado (Word ou Excel):
Dim oWord As Word.Application
Dim oExcel As Excel.Application
On Error Goto err_handler
1: Set oWord = CreateObject("Word.Application")
2: Set oExcel = CreateObject("Excel.Application")
' ... some other code
err_handler:
MsgBox "The code failed at line " & Erl, vbCritical
Use uma combinação de caixas de mensagens e de números de linhas para
encontrar o erro. - Tente usar o vínculo posterior (ou seja, Dim oWordApp como
objeto). Objetos de vínculo anterior necessitam que suas interfaces
personalizadas sejam empacotadas pelos limites do processo. Se houver algum
problema ao empacotar uma interface personalizada durante CreateObject ou Novo, você receberá uma mensagem de erro 429. Um objeto com vinculo
posterior usa uma interface definida pelo usuário(IDispatch) que não necessita
de um proxy personalizado para ser empacotada. Experimente usar um objeto de
vínculo posterior para ver se faz diferença.
Se o problema ocorrer
quando o objeto for de vínculo anterior, o problema está no aplicativo do
servidor e geralmente pode ser corrigido reinstalando o aplicativo (veja mais
adiante). - Se estiver automatizando de ASP ou de um componente MTS,
use CreateObject em vez de Server.CreateObject(). O uso de Server.CreateObject criará uma instância no aplicativo do Office com a identidade de
um pacote MTS que é conhecido por causar problemas no Microsoft
Office.
Verifique o servidor de automação
Os motivos mais comuns para haver um erro em
CreateObject ou
Novo são problemas no próprio aplicativo do servidor. Geralmente,
esses problemas estão na configuração ou na instalação do aplicativo. Alguns
itens que devem ser verificados:
- Verifique se o aplicativo do Microsoft Office que você quer
usar para automatizar está instalado no computador local e certifique-se de que
seja possível iniciar o aplicativo a partir do menu Iniciar e depois da caixa
de diálogo Executar. Se não for possível iniciar o programa manualmente ele não
funcionará durante a automação.
- Registre novamente o aplicativo digitando o caminho para o
servidor no menu Iniciar e depois para a caixa diálogo Executar, e depois anexe
/RegServer ao final da linha. Pressione OK. Isso deve fazer com que o aplicativo seja executado
silenciosamente e registrá-lo novamente como um servidor COM. Se o problema
estiver numa chave de registro que está faltando, isso geralmente corrige o
problema.
- Verifique a chave LocalServer32 no CLSID para o aplicativo
que você quiser usar para automatizar. Certifique-se de que ela aponta para o
local correto do aplicativo e também de que o nome do caminho esteja num
formato curto (DOS 8.3). Ainda que não seja obrigatório que um servidor seja
registrado usando um nome de caminho curto, nomes de caminho longos que têm
espaços embutidos são conhecidos por causar problemas em alguns sistemas (veja
mais adiante).
Para verificar a chave do caminho que está armazenada
para o servidor, inicie o Editor do Registro do Windows, digitando
regedit no menu Iniciar e depois na caixa de diálogo
Executar. Navegue até a chave HKEY_CLASSES_ROOT\Clsid. Nessa chave você
encontrará os CLSIDs para os servidores de automação registrados no sistema.
Depois, usando os valores, encontre a chave que representa o aplicativo do
Office que você quiser automatizar e verifique o caminho da chave LocalServer32
do mesmo.
+========================+=========================================+
| Servidor do Office | Chave CLSID |
+========================+=========================================+
| Access.Application | {73A4C9C1-D68D-11D0-98BF-00A0C90DC8D9} |
+------------------------+-----------------------------------------+
| Excel.Application | {00024500-0000-0000-C000-000000000046} |
+------------------------+-----------------------------------------+
| FrontPage.Application | {04DF1015-7007-11D1-83BC-006097ABE675} |
+------------------------+-----------------------------------------+
| Outlook.Application | {0006F03A-0000-0000-C000-000000000046} |
+------------------------+-----------------------------------------+
| PowerPoint.Application | {91493441-5A91-11CF-8700-00AA0060263B} |
+------------------------+-----------------------------------------+
| Word.Application | {000209FF-0000-0000-C000-000000000046} |
+------------------------+-----------------------------------------+
O caminho é correspondente ao local do arquivo? Saiba que nomes
de caminho curtos podem dar a impressão de que um caminho está correto quando
na verdade não está. Por exemplo, tanto o Microsoft Office quanto o Microsoft
Internet Explorer (se estiverem instalados em seus locais padrão) terão um nome
de caminho similar a "C:\PROGRA~1\MICROS~X\" em que X será um número. Não é tão
óbvio que você está vendo um nome de caminho curto.
É possível testar
se o caminho está realmente correto copiando o valor do registro e colocando-o
na caixa de diálogo Executar, no menu Iniciar (remova a opção /Automation antes de executar o aplicativo). O aplicativo é iniciado quando
você seleciona OK? Se for, então o servidor está registrado corretamente. Se não
for, você deve substituir o valor da chave LocalServer32 pelo caminho correto
(use um nome de caminho curto, se for possível). - Sabe-se que ocorrem problemas ao automatizar o Word ou o
Excel se ou o modelo Normal.dot (Word) ou o arquivo de recurso Excel.xlb
(Excel) ficou corrompido. Para testar se houve um corrompimento, pesquise os
discos rígidos locais para encontrar todas as instâncias de Normal.dot ou de
*.xlb. (Observe que se você estiver executando o Windows 2000, Windows NT ou o
Windows 95/98 com perfis ativados, você pode encontrar diversas cópias desses
arquivos, uma para cada perfil de usuário do sistema.) Renomeie temporariamente
o(s) arquivo(s) Normal.dot ou o(s) arquivo(s) *.xlb e execute o teste de
automação novamente (o Word e o Excel criarão esses arquivos se não forem
encontrados). Agora o código funciona? Se funcionar, então os arquivos que você
renomeou devem ser excluídos, já que estão corrompidos. Se não funcionar, você
deve renomeá-los com seus nomes originais novamente para que as configurações
personalizadas contidas nesses arquivos não sejam perdidas.
- Se você estiver em um sistema Windows NT, Windows 2000,
Windows XP ou Windows Server 2003, execute o aplicativo na conta do
Administrador. Servidores do Office necessitam de acesso para leitura/gravação
no registro e no disco rígido e talvez não sejam carregados corretamente se as
configurações de segurança atuais negarem esse privilégio.
Como verificar o sistema
A configuração do sistema também podem causar problemas na
criação de servidores COM fora do processo. A seguir estão alguns itens que
devem ser verificados em sistemas em que o erro ocorrer:
- O problema acontece com algum servidor fora do processo? Se
você tiver um aplicativo que use apenas um determinado servidor COM (por
exemplo o Word), convém testar um outro servidor fora do processo para se
certificar de que o problema não seja na própria camada COM. Se nenhum servidor
COM fora do processo puder ser criado nesse sistema, então uma reinstalação dos
arquivos OLE do sistema (veja abaixo) ou uma reinstalação do sistema
operacional será necessária para resolver a questão.
- Verifique os números de versão dos arquivos OLE do sistema
que gerenciam a automação. Esses arquivos estão geralmente instalados como um
conjunto e devem ter números de versão correspondentes. Um utilitário de
instalação configurado incorretamente pode instalar, erroneamente, os arquivos
separadamente, fazendo com que eles não sejam correspondentes. Para evitar
problemas com a automação, você deve verificar os arquivos para se certificar
de que as versões são correspondentes.
Você encontrará os arquivos de
automação no diretório Windows\System ou Winnt\System32. A seguir está uma
lista de arquivos que devem ser verificados:
+-----------------+-------------+---------------------+
| Nome do arquivo | Versão | Modificado em |
+-----------------+-------------+---------------------+
| Asycfilt.dll | 2.40.4275 | 08 de março de 1999 |
| Oleaut32.dll | 2.40.4275 | 08 de março de 1999 |
| Olepro32.dll | 5.0.4275 | 08 de março de 1999 |
| Stdole2.tlb | 2.40.4275 | 08 de março de 1999 |
+-----------------+-------------+---------------------+
Verifique as versões dos arquivos clicando no arquivo com o botão
direito do mouse no Explorer e selecionando Propriedades no menu que aparecer.
Os valores mais importantes são os últimos quatro dígitos da versão do arquivo
e a data em que foi modificado. Convém verificar se esses valores são iguais
para todos os arquivos de automação.
Observe que os números de versão
e as datas acima foram citadas apenas com a finalidade de exemplos. Os valores
reais podem ser diferentes. O importante é que esses valores sejam
correspondentes entre si e não a esta tabela.
Se os arquivos não
tiverem números de versão ou datas de modificação correspondentes, você pode
fazer o download de um utilitário de extração automática que atualizará seus
arquivos de automação.
Para obter informações adicionais,
clique no número abaixo para ler o artigo na Base de Dados de Conhecimento da
Microsoft: 290887
(http://support.microsoft.com/kb/290887/
)
VBRun60sp5.exe instala os arquivos de tempo de execução do Visual Basic 6.0 SP5
- O Windows NT 4.0 tem um problema conhecido ao iniciar
servidores de automação que ficam numa pasta que contém um espaço embutido no
nome e/ou pareça com outra pasta cujos primeiros 8 caracteres são idênticos.
Por exemplo, um servidor que esteja em C:\Arquivos de programas\QualquerPasta
pode falhar ao iniciar durante uma chamada para CreateObject se houver outra
pasta no sistema chamada C:\Coisas de programas\QualquerPasta. Para obter mais
informações sobre isso, consulte o seguinte artigo na Base de Dados de
Conhecimento:Para obter informações adicionais e etapas uma
solução alternativa para o problema, clique no número abaixo para ler o artigo
na Base de Dados de Conhecimento da Microsoft:
185126
(http://support.microsoft.com/kb/185126/PT-BR/
)
BUG: Falha de inicialização do servidor COM/OLE no Windows NT 4.0
Como reinstalar o Microsoft Office
Se nenhuma das etapas anteriores ajudar a resolver o problema,
considere desinstalar e reinstalar o Microsoft Office. A Microsoft recomenda
que você desinstale a versão existente primeiro e depois reinstale a partir dos
disquetes originais de instalação.
Para obter uma lista completa de
itens que devem ser removidos, por favor, leia os seguintes artigos na Base de
Dados de Conhecimento:
219423
(http://support.microsoft.com/kb/219423/PT-BR/
)
OFF2000: Como remover completamente o Microsoft Office 2000
158658
(http://support.microsoft.com/kb/158658/PT-BR/
)
OFF97: Como remover completamente o Microsoft Office 97
Para
obter informações adicionais sobre como solucionar o problema do erro '429',
clique no número abaixo para ler o artigo na Base de Dados de Conhecimento da
Microsoft:
240377
(http://support.microsoft.com/kb/240377/PT-BR/
)
COMO: Certificar-se de que o Jet 3.5 está instalado corretamente (Parte I)
Para obter as informações mais recentes e código de
exemplo sobre automação do Microsoft Office, por favor, consulte o site (em
inglês) de suporte online da Microsoft em: