Artigo: 288902 - Última revisão: quarta-feira, 31 de Janeiro de 2007 - Revisão: 9.3

Comportamento GetObject e CreateObject de servidores de automatização do Office

Dica do SistemaEste artigo aplica-se a um sistema operativo diferente do que está a utilizar. Foi desactivado o conteúdo do artigo, que pode não ser relevante para si.

Nesta página

Expandir tudo | Reduzir tudo

Sumário

Este artigo descreve os diferentes comportamentos que ocorrem quando utiliza as funções GetObject e CreateObject com várias versões de aplicações do Microsoft Office. GetObject e CreateObject são funções que são fornecidas pelo Microsoft Visual Basic e Microsoft Visual Basic for Applications (VBA). No entanto, as informações também se aplicam ao Microsoft Visual C++ se processar as referências para GetObject como chamadas para GetActiveObject API e referências a CreateObject como chamadas para CoCreateInstance API.

Mais Informação

GetObject

GetObject é utilizado para ligar a uma instância em execução de um servidor de automatização. Existem algumas formas diferentes de chamada a GetObject , mas a sintaxe é recomendada para o Microsoft Office aplicações é o seguinte:
set xlApp = GetObject(, "Excel.Application")
				
se uma instância do Microsoft Excel estiver em execução quando este código é executado, tiver acesso ao modelo de objecto da instância em execução a variável xlApp. Se nenhuma instância estiver em execução, receberá a seguinte mensagem de detectável run-time error:
Erro de tempo de execução '429':
O componente ActiveX não é possível criar o objecto
Se estiverem a executar várias instâncias do Microsoft Excel, GetObject liga à instância que é iniciado pela primeira vez. Se, em seguida, fechar a primeira ocorrência, outra chamada a GetObject anexa a segunda ocorrência que foi iniciada e assim sucessivamente.

Pode anexar a uma instância específica, se souber o nome de um documento abrir essa instância. Por exemplo, se uma instância do Excel estiver em execução com um livro aberto com o nome Book2, o seguinte código anexa com êxito a essa instância mesmo que não seja a primeira instância que foi iniciada:
Set xlApp = GetObject("Book2").Application
				

CreateObject

CreateObject é utilizado para iniciar uma nova instância de um servidor de automatização. Por exemplo:
set xlApp = CreateObject("Excel.Application")
				
dependendo se o servidor foi concebido como SingleUse ou MultiUse, outro processo de servidor pode ou não pode ser iniciado. Isto pode ser uma diferença importante para decidir se deve forçar encerrar uma automatização instância. Por exemplo, com um servidor MultiUse, se uma instância já estiver em execução antes de os anexar, em seguida, poderá evitar a encerrar o servidor programaticamente quando tiver terminado automatizá-lo.

A tabela seguinte funciona como uma referência útil ao implementar uma solução com o Microsoft Office. Lista os comportamentos e atributos de várias versões e aplicações do Microsoft Office, tal como se o servidor assume como predefinição a ser visível quando iniciado, se for SingleUse ou MultiUse, se tiver um UserControl propriedade, se tiver um método de Sair e o nome de classe para a janela principal.

Reduzir esta tabelaExpandir esta tabela
AplicaçõesVisívelInstânciasTem UserControlTem de serNome da classe
Excel 97, 2000, 2002, 2003, 2007NãoSingleUseSimSimXlMain
Word 97, 2000, 2002, 2003, 2007NãoSingleUseSimSimOpusApp
PowerPoint 97NãoMultiUseNãoSimPP97FrameClass
PowerPoint 2000NãoMultiUseNãoSimPP9FrameClass
PowerPoint 2002NãoMultiUseNãoSimPP10FrameClass
PowerPoint 2003NãoMultiUseNãoSimPP11FrameClass
O PowerPoint 2007NãoMultiUseNãoSimPP12FrameClass
O Access 97SimSingleUseSimSimOmínio
O Access 2000, 2002, 2003, 2007NãoSingleUseSimSimOmínio
Project 98, 2000NãoMultiUseSimSimJWinproj WhimperMainClass

O nome de classe de janela é útil para chamar a API FindWindow quando pretender saber convenientemente se qualquer já está a ser executado. UserControl propriedade é uma propriedade booleana que indica se a aplicação de servidor encerra automaticamente quando a última referência é disponibilizada (definida como nada). O método quit permite-lhe substituir a propriedade UserControl nos casos em que é necessário (por exemplo, quando uma instância não encerra após a última referência comercialização).

Em geral, a Microsoft recomenda que utilize uma nova instância de uma aplicação do Office em vez de anexar a uma instância que o utilizador poderá estar a utilizar. É melhor criar uma instância utilizando ProgID de aplicações e, em seguida, abrir ou criar novos objectos a partir daí. Outros ProgID, tais como Excel.folha e Word.Document e por aí em diante, destinam-se para utilização no OLE (objecto de ligação e incorporação) e pode devolver resultados inconsistentes quando utilizado com CreateObject . Ao utilizar o ProgID de aplicações, evitar potenciais problemas iniciando explicitamente o servidor de automatização (não incorporar).

Quando tiver terminado com o servidor de automatização, libertar todas as referências ao mesmo e chamar o método quit (se disponível) para que o servidor é encerrado como previsto. Se pretende configurar uma instância através de automatização e, em seguida, deixe aberta para o utilizador a utilizar, terá de definir a propriedade UserControl para TRUE e, em seguida, libertar todas as referências. O servidor permanece em seguida, executar (porque a propriedade UserControl é TRUE ) e é encerrado correctamente quando o utilizador fecha a aplicação (porque existem sem referências pendentes).

Nota Para o Word, a propriedade de UserControl é só de leitura. Não pode ser definido como VERDADEIRO ou FALSO. Word sempre permanece em execução quando a última referência é lançada.

Referências

Para obter mais informações sobre como utilizar GetObject/CreateObject e para obter informações sobre algumas excepções e problemas relacionados com utilizando a automatização para Microsoft Office, clique em números de artigo que se seguem para visualizar os artigos na base de dados de conhecimento da Microsoft:
222783  (http://support.microsoft.com/kb/222783/ ) PPT2000: CreateObject não criar nova sessão do PowerPoint
188546  (http://support.microsoft.com/kb/188546/ ) Erro: Iniciar manualmente o Word utiliza a mesma instância como automatização
265385  (http://support.microsoft.com/kb/265385/ ) INFO: A automatização do PowerPoint 97 e PowerPoint 2000 visualizadores
259940  (http://support.microsoft.com/kb/259940/ ) Erro: O Word 2000 não ser quando Keybindings.ClearAll É chamada
258511  (http://support.microsoft.com/kb/258511/ ) COMO: Obter o identificador de janela para a aplicação do Office para automatização
249169  (http://support.microsoft.com/kb/249169/ ) PPT97: PowerPoint 97 permanece na memória depois de obter uma apresentação e a ser fechado
159922  (http://support.microsoft.com/kb/159922/ ) XL97: Utilizar o método Quit pode causar a operação ilegal

A informação contida neste artigo aplica-se a:
  • Microsoft Office Excel 2007
  • Microsoft Office Excel 2003
  • Microsoft Excel 2002 Standard Edition
  • Microsoft Excel 2000 Standard Edition
  • Microsoft Excel 97 Standard Edition
  • Microsoft Office Access 2007
  • Microsoft Office Access 2003
  • Microsoft Access 2002 Standard Edition
  • Microsoft Access 2000 Standard Edition
  • Microsoft Access 97 Standard Edition
  • Microsoft Office PowerPoint 2007
  • Microsoft Office PowerPoint 2003
  • Microsoft PowerPoint 2002 Standard Edition
  • Microsoft PowerPoint 2000 Standard Edition
  • Microsoft PowerPoint 97 Standard Edition
  • Microsoft Project 2000 Standard Edition
  • Microsoft Project 98 Standard Edition
  • Microsoft Office Word 2007
  • Microsoft Office Word 2003
  • Microsoft Word 2002 Standard Edition
  • Microsoft Word 2000 Standard Edition
  • Microsoft Word 97 Standard Edition
Palavras-chave: 
kbmt kbautomation kbinfo KB288902 KbMtpt
Tradução automáticaTradução automática
IMPORTANTE: Este artigo foi traduzido por um sistema de tradução automática (também designado por Machine translation ou MT), não tendo sido portanto revisto ou traduzido por humanos. A Microsoft tem artigos traduzidos por aplicações (MT) e artigos traduzidos por tradutores profissionais. O objectivo é simples: oferecer em Português a totalidade dos artigos existentes na base de dados do suporte. Sabemos no entanto que a tradução automática não é sempre perfeita. Esta pode conter erros de vocabulário, sintaxe ou gramática? erros semelhantes aos que um estrangeiro realiza ao falar em Português. A Microsoft não é responsável por incoerências, erros ou estragos realizados na sequência da utilização dos artigos MT por parte dos nossos clientes. A Microsoft realiza actualizações frequentes ao software de tradução automática (MT). Obrigado.
Clique aqui para ver a versão em Inglês deste artigo: 288902  (http://support.microsoft.com/kb/288902/en-us/ )