Função GetObject

Aplica-se A
Access para Microsoft 365 Access 2024 Access 2021 Access 2019 Access 2016

Nota

A função, método, objeto ou propriedade descrita neste tópico será desativada se o Serviço Microsoft Jet Expression estiver em execução no modo sandbox, o que impede a avaliação de expressões potencialmente não seguras. Para obter mais informações sobre o modo sandbox, pesquise "modo sandbox" na Ajuda.

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

Sintaxe

GetObject([nome_caminho ] [, classe ] )

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

Argumento Descrição
nome do caminho Opcional. Variant (String). O caminho completo e o nome do ficheiro que contém o objeto a recuperar. Se pathname for omitido, a classe será necessária.
classe Opcional. Variant (String). Uma cadeia de caracteres que representa a classe do objeto.

O argumento classusa a sintaxe appname.objecttype e tem estas partes:

Parte Descrição
appname Obrigatório. Variant (String). O nome do aplicativo que fornece o objeto.
tipo de objeto Obrigatório. Variant (String). O tipo ou classe de objeto a ser criado.

Observações

Nota

Os exemplos seguintes demonstram a utilização desta função no módulo VBA (Visual Basic for Applications). Para obter mais informações sobre como trabalhar com o VBA, selecione Referência para Programadores na lista pendente junto a Procurar e introduza um ou mais termos na caixa de pesquisa.

Use a função GetObject para acessar um objeto ActiveX de um arquivo e atribuir o objeto a uma variável de objeto. Use a instrução Set para atribuir o objeto retornado por GetObject à variável de objeto. Por exemplo:


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

Quando esse código é executado, o aplicativo associado ao nome do caminho especificado é iniciado e o objeto no arquivo especificado é ativado.

Se pathname for uma cadeia de caracteres de comprimento zero (""), GetObject retornará uma nova instância de objeto do tipo especificado. Se o argumento pathname for omitido, GetObject retornará 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 de carateres que identifique a parte do ficheiro que pretende ativar. Para obter informações sobre como criar essa cadeia de caracteres, consulte a documentação do aplicativo que criou o objeto.

Por exemplo, em um aplicativo de desenho, você pode ter várias camadas para um desenho armazenadas em um arquivo. Você pode usar o seguinte código para ativar uma camada dentro de um desenho chamado SCHEMA.CAD:


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

Se você não especificar a classe do objeto, a automação determinará o aplicativo a ser iniciado e o objeto a ser ativado, com base no nome do arquivo fornecido. Alguns arquivos, no entanto, podem suportar mais de uma classe de objeto. Por exemplo, um desenho poderá suportar três tipos de objetos diferentes: um objeto Aplicação , um objeto Desenho e um objeto Barra de Ferramentas , sendo todos parte do mesmo ficheiro. Para especificar qual objeto em um arquivo você deseja ativar, use 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 um aplicativo de desenho e DRAWING é um dos tipos de objeto que ele suporta.

Depois que um objeto é ativado, você faz referência a ele no código usando a variável de objeto que você definiu. No exemplo anterior, você acessa propriedades e métodos do novo objeto usando a variável MyObjectde objeto . Por exemplo:


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

Nota

Use a função GetObject quando houver uma instância atual do objeto ou se você quiser criar o objeto com um arquivo já carregado. Se não houver nenhuma instância atual e você não quiser que o objeto seja iniciado com um arquivo carregado, use a função CreateObject .

Se um objeto tiver se registrado como um objeto de instância única, apenas uma instância do objeto será criada, não importa quantas vezes CreateObject seja executado. Com um objeto de instância única, GetObject sempre retorna a mesma instância quando chamado com a sintaxe de cadeia de comprimento zero (""), e causa um erro se o argumento pathname for omitido. Você não pode usar GetObject para obter uma referência a uma classe criada com Visual Basic.

Exemplo

Este exemplo usa a função GetObject para obter uma referência a uma planilha específica do Excel (MyXL). Utiliza a propriedade Aplicação da folha de cálculo para tornar o Excel visível, para fechá-lo e assim sucessivamente. Usando duas chamadas de API, o procedimento DetectExcel Sub procura o Excel e, se estiver em execução, insere-o na tabela Running Object. 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 sinalizador ExcelWasNotRunning seja definido como True. A segunda chamada para GetObject especifica um arquivo a ser aberto. Se o Excel ainda não estiver em execução, a segunda chamada inicia-o e devolve uma referência à folha de cálculo representada pelo ficheiro especificado, mytest.xls. O arquivo deve existir no local especificado; caso contrário, o erro de automação de erro do Visual Basic é gerado. Em seguida, o código de exemplo torna o Excel e a janela que contém a folha de cálculo especificada visíveis. Por fim, se não existir nenhuma versão anterior do Excel em execução, o código utiliza o método Quit do objeto Application para fechar o Excel. Se a aplicação já estiver em execução, não será feita nenhuma tentativa de fechá-la. A referência em si é liberada definindo-a 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