Função GetObject

Devolve uma referência a um objeto fornecido por um componente ActiveX.

Sintaxe

GetObject([ pathname ], [ classe ])

A sintaxe da função GetObject tem estes argumentos nomeados:

Sair Descrição
nomedocaminho Opcional; Variant (Cadeia). O caminho completo e o nome do ficheiro que contém o objeto a obter. Se pathname for omitido, a classe é necessária.
classe Opcional; Variant (Cadeia). Uma cadeia que representa a classe do objeto.

O argumentode classe utiliza o nome da aplicação de sintaxe. objecttype e tem as seguintes partes:

Sair Descrição
appname Obrigatório; Variant (Cadeia). O nome do aplicativo que fornece o objeto.
objectType Obrigatório; Variant (Cadeia). O tipo ou classe do objeto a ser criado.

Comentários

Utilize a função GetObject para aceder a um objeto ActiveX a partir de um ficheiro e atribuir o objeto a uma variável de objeto. Utilize a instrução Set para atribuir o objeto devolvido por GetObject à variável de objeto. Por exemplo:

Dim CADObject As Object
Set CADObject = GetObject("C:\CAD\SCHEMA.CAD")

Quando este código é executado, a aplicação associada ao pathname especificado é iniciada e o objeto no ficheiro especificado é ativado.

Se pathname for uma cadeia de comprimento zero (""), GetObject devolve uma nova instância de objeto do tipo especificado. Se o argumento pathname for omitido, GetObject devolve um objeto atualmente ativo do tipo especificado. Se não existir nenhum objeto do tipo especificado, ocorrerá um erro.

Algumas aplicações permitem-lhe ativar parte de um ficheiro. Adicione um ponto de exclamação (!) ao final do nome do ficheiro e siga-o com uma cadeia que identifique a parte do ficheiro que pretende ativar. Para obter informações sobre como criar esta cadeia, veja a documentação da aplicação que criou o objeto.

Por exemplo, numa aplicação de desenho, pode ter várias camadas num desenho armazenado num ficheiro. Pode utilizar o seguinte código para ativar uma camada num desenho chamado SCHEMA.CAD:

Set LayerObject = GetObject("C:\CAD\SCHEMA.CAD!Layer3")

Se não especificar a classe do objeto, a automatização determina a aplicação a iniciar e o objeto a ativar, com base no nome de ficheiro que fornecer. Alguns ficheiros, no entanto, podem suportar mais do que uma classe de objeto. Por exemplo, um desenho pode suportar três tipos diferentes de objetos: um objeto Aplicação , um objeto de Desenho e um objeto da Barra de Ferramentas , todos os quais fazem parte do mesmo ficheiro. Para especificar o objeto num ficheiro que pretende ativar, utilize o argumento de classe opcional. Por exemplo:

Dim MyObject As Object
Set MyObject = GetObject("C:\DRAWINGS\SAMPLE.DRW", "FIGMENT.DRAWING")

No exemplo, FIGMENT é o nome de uma aplicação de desenho e DRAWING é um dos tipos de objeto suportados. Depois de um objeto ser ativado, pode referenciá-lo no código com a variável de objeto que definiu. No exemplo anterior, pode aceder às propriedades e métodos do novo objeto com a variável de objeto MyObject. Por exemplo:

MyObject.Line 9, 90
MyObject.InsertText 9, 100, "Hello, world."
MyObject.SaveAs "C:\DRAWINGS\SAMPLE.DRW"

Observação

Utilize a função GetObject quando existir uma instância atual do objeto ou se quiser criar o objeto com um ficheiro já carregado. Se não existir nenhuma instância atual e não quiser que o objeto seja iniciado com um ficheiro carregado, utilize a função CreateObject .

Se um objeto se registrou como um objeto de instância única, apenas uma instância do objeto é criada, independentemente de quantas vezes o CreateObject for executado. Com um objeto de instância única, GetObject devolve sempre a mesma instância quando chamado com a sintaxe da cadeia de comprimento zero ("") e causa um erro se o argumento pathname for omitido. Não pode utilizar GetObject para obter uma referência a uma classe criada com o Visual Basic.

Exemplo

Este exemplo utiliza a função GetObject para obter uma referência a uma folha de cálculo específica do Microsoft Excel (MyXL). Utiliza a propriedade Aplicação da folha de cálculo para tornar o Microsoft Excel visível, para fechá-lo, etc.

Ao utilizar duas chamadas à API, o DetectExcel procedimento Sub procura o Microsoft Excel e, se estiver em execução, introduza-o na Tabela de Objetos em Execução.

A primeira chamada para GetObject causa um erro se o Microsoft Excel ainda não estiver em execução. No exemplo, o erro faz com que o ExcelWasNotRunning sinalizador seja definido como Verdadeiro.

A segunda chamada para GetObject especifica um ficheiro a abrir. Se o Microsoft Excel ainda não estiver em execução, a segunda chamada inicia-a e devolve uma referência à folha de cálculo representada pelo ficheiro especificado, mytest.xls. O ficheiro tem de existir na localização especificada; caso contrário, é gerado o erro Automation error do Visual Basic.

Em seguida, o código de exemplo torna o Microsoft Excel e a janela que contém a folha de cálculo especificada visível. Por fim, se não existir uma versão anterior do Microsoft Excel em execução, o código utiliza o método Quit do objeto da Aplicação para fechar o Microsoft Excel. Se a aplicação já estava em execução, não é efetuada nenhuma tentativa para fechá-la. A própria referência é lançada ao defini-la como Nada.

' Declare necessary API routines:
Declare Function FindWindow Lib "user32" Alias _
"FindWindowA" (ByVal lpClassName as String, _
                    ByVal lpWindowName As Long) As Long

Declare Function SendMessage Lib "user32" Alias _
"SendMessageA" (ByVal hWnd as Long,ByVal wMsg as Long, _
                    ByVal wParam as Long, _
                    ByVal lParam As Long) As Long

Sub GetExcel()
    Dim MyXL As Object    ' Variable to hold reference
                                ' to Microsoft Excel.
    Dim ExcelWasNotRunning As Boolean    ' Flag for final release.

' Test to see if there is a copy of Microsoft Excel already running.
    On Error Resume Next    ' Defer error trapping.
' Getobject function called without the first argument returns a 
' reference to an instance of the application. If the application isn't
' running, an error occurs.
    Set MyXL = Getobject(, "Excel.Application")
    If Err.Number <> 0 Then ExcelWasNotRunning = True
    Err.Clear    ' Clear Err object in case error occurred.

' Check for Microsoft Excel. If Microsoft Excel is running,
' enter it into the Running Object table.
    DetectExcel

' Set the object variable to reference the file you want to see.
    Set MyXL = Getobject("c:\vb4\MYTEST.XLS")

' Show Microsoft Excel through its Application property. Then
' show the actual window containing the file using the Windows
' collection of the MyXL object reference.
    MyXL.Application.Visible = True
    MyXL.Parent.Windows(1).Visible = True
     Do manipulations of your  file here.
    ' ...
' If this copy of Microsoft Excel was not running when you
' started, close it using the Application property's Quit method.
' Note that when you try to quit Microsoft Excel, the
' title bar blinks and a message is displayed asking if you
' want to save any loaded files.
    If ExcelWasNotRunning = True Then 
        MyXL.Application.Quit
    End IF

    Set MyXL = Nothing    ' Release reference to the
                                ' application and spreadsheet.
End Sub

Sub DetectExcel()
' Procedure dectects a running Excel and registers it.
    Const WM_USER = 1024
    Dim hWnd As Long
' If Excel is running this API call returns its handle.
    hWnd = FindWindow("XLMAIN", 0)
    If hWnd = 0 Then    ' 0 means Excel not running.
        Exit Sub
    Else                
    ' Excel is running so use the SendMessage API 
    ' function to enter it in the Running Object Table.
        SendMessage hWnd, WM_USER + 18, 0, 0
    End If
End Sub

Confira também

Suporte e comentários

Tem dúvidas ou quer enviar comentários sobre o VBA para Office ou sobre esta documentação? Confira Suporte e comentários sobre o VBA para Office a fim de obter orientação sobre as maneiras pelas quais você pode receber suporte e fornecer comentários.