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

O suporte para o Office 2003 terminou

A Microsoft terminou o suporte para o Office 2003 em 8 de abril de 2014. Esta alteração afetou as suas atualizações de software e opções de segurança. Saiba o que isto significa para você e como permanecer protegido.

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 traduzido ou revisto por pessoas. A Microsoft possui artigos traduzidos por aplicações (MT) e artigos traduzidos por tradutores profissionais, com o objetivo de oferecer em português a totalidade dos artigos existentes na base de dados de suporte. No entanto, a tradução automática não é sempre perfeita, podendo conter erros de vocabulário, sintaxe ou gramática. A Microsoft não é responsável por incoerências, erros ou prejuízos ocorridos em decorrência da utilização dos artigos MT por parte dos nossos clientes. A Microsoft realiza atualizações freqüentes ao software de tradução automática (MT). Obrigado.

Clique aqui para ver a versão em Inglês deste artigo: 288902
Sumário
Este artigo descreve os diferentes comportamentos que ocorrem quando você usa as funções GetObject e CreateObject com várias versões dos aplicativos do Microsoft Office. GetObject e CreateObject são funções que são fornecidas pelo Microsoft Visual Basic e o Microsoft Visual Basic for Applications (VBA). No entanto, as informações também são aplicáveis ao Microsoft Visual C++ se tratar de referências a GetObject como chamadas ao GetActiveObject API e referências para CreateObject como chamadas ao CoCreateInstance API.
Mais Informações

GetObject

GetObject é usado para anexar a uma instância em execução de um servidor de automação. Há algumas maneiras de chamar GetObject , mas a sintaxe é recomendada para o Microsoft Office aplicativos é o seguinte:
set xlApp = GetObject(, "Excel.Application")				
se uma instância do Microsoft Excel estiver sendo executado quando esse código é executado, você tem acesso modelo de objeto da instância em execução através de variável xlApp. Se nenhuma instância estiver sendo executado, você a seguinte mensagem erro interceptável em tempo de execução:
Erro em tempo de execução '429':
O componente ActiveX não é possível criar o objeto
Se várias instâncias do Microsoft Excel estiverem em execução, GetObject anexa a instância é iniciada pela primeira vez. Se você fechar, em seguida, a primeira instância, outra chamada a GetObject anexa a segunda instância que foi iniciada e assim por diante.

Se você souber o nome de um documento aberto nesse caso, você pode anexar a uma instância específica. Por exemplo, se uma instância do Excel está em execução com uma pasta de trabalho aberta chamada Book2, o código a seguir anexa com êxito a essa instância mesmo se não for a primeira instância que foi iniciada:
Set xlApp = GetObject("Book2").Application				

CreateObject

CreateObject é usado para iniciar uma nova instância de um servidor de automação. Por exemplo:
set xlApp = CreateObject("Excel.Application")				
dependendo se o servidor for projetado como SingleUse ou MultiUse, outro processo do servidor pode ou não pode ser iniciado. Isso pode ser uma distinção importante para decidir se você forçosamente deve desligar uma automação instância. Por exemplo, com um servidor MultiUse, se uma instância já estiver sendo executado antes de anexar a ele, em seguida, convém evitar desligando o servidor através de programação quando você terminar Automatizando-lo.

A tabela a seguir serve como uma referência útil ao implementar uma solução com o Microsoft Office. Ele lista comportamentos e atributos de várias versões e aplicativos do Microsoft Office, como se o servidor padrão sendo visíveis quando iniciado, se for SingleUse ou MultiUse, se ele tem um UserControl propriedade, se ele tiver um método Quit e o nome da classe para sua janela principal.

Aplicativo (s)VisívelInstânciasTem UserControlTem fecharClassName
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
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 principal é útil para chamar FindWindow API quando você deseja descobrir convenientemente se qualquer instância já estiver sendo executado. O UserControl propriedade é uma propriedade booleana que indica se o aplicativo do servidor seja desligado quando a última referência é automaticamente lançado (definido como nada). O método Quit permite substituir a propriedade UserControl em casos onde é necessário (como quando uma instância não desliga após a última referência é lançada).

Em geral, a Microsoft recomenda que você use uma nova instância de um aplicativo do Office em vez de anexar a uma instância que o usuário pode estar usando. É melhor criar uma instância usando o ProgID do aplicativo e em seguida, abrir ou criar novos objetos a partir daí. Outros ProgIDs, como Excel.Sheet Word.Document e assim por diante, servem para uso em OLE (vinculação de objeto e incorporação de objetos) e pode fornecer resultados inconsistentes quando usado com CreateObject . Usando o ProgID de aplicativo, você pode evitar possíveis problemas iniciando explicitamente o servidor para automação (não incorporar).

Quando você tiver terminado com o servidor de automação, liberar todas as referências a ele e chamar seu método Quit (se disponível) para que o servidor é desligado conforme o esperado. Se você deseja configurar uma instância por meio de automação e, em seguida, deixe aberto para o usuário use, você precisará definir a propriedade UserControl como Verdadeiro e solte em todas as suas referências. O servidor, permanecerá executando (porque a propriedade UserControl é Verdadeiro ) e desligar corretamente quando o usuário fecha o aplicativo (porque não há nenhuma referência pendente).

Observação Para o Word, a propriedade UserControl é somente leitura. Ela não pode ser definida como True ou False. Word sempre permanece em execução quando a última referência é liberada.
Referências
Para obter mais informações sobre como usar o CreateObject/GetObject e para saber sobre algumas exceções e problemas com usando automação para Microsoft Office, clique os números abaixo para ler os artigos na Base de dados de Conhecimento da Microsoft:
222783PPT2000: CreateObject não criar nova sessão do PowerPoint
188546Erro: Iniciar manualmente o Word usa a mesma instância como automação
265385INFO: Automação do PowerPoint 97 e PowerPoint 2000 visualizadores
259940Erro: Word 2000 não fechar ao keybindings.ClearAll é chamado
258511COMO: Obter identificador de janela para aplicativo do Office para automação
249169PPT97: PowerPoint 97 permanece na memória após obtendo uma apresentação e ser fechado
159922XL97: Usando Salvar método pode causar uma operação ilegal
ROT IRunningObjectTable LPRUNNINGOBJECTTABLE moniker referência contagem

Aviso: este artigo foi traduzido automaticamente

Właściwości

Identyfikator artykułu: 288902 — ostatni przegląd: 01/31/2007 19:08:08 — zmiana: 9.3

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

  • kbmt kbautomation kbinfo KB288902 KbMtpt
Opinia