Applies ToAccess para Microsoft 365 Access 2024 Access 2021 Access 2019 Access 2016

Nota: A função, método, objeto ou propriedade descrita neste tópico está 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 inseguras. Para obter mais informações sobre o modo sandbox, procure "modo sandbox" na Ajuda.

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

Sintaxe

GetObject([pathname ] [, class ] )

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

Argumento

Descrição

pathname

Opcional. Variante (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. Variante (Cadeia). Uma cadeia que representa a classe do objeto.

A classeargumento utiliza a sintaxe appname.objecttype e tem as seguintes partes:

Parte

Descrição

nome da aplicação

Obrigatório. Variante (Cadeia). O nome da aplicação que fornece o objeto.

objecttype

Obrigatório. Variante (Cadeia). O tipo ou classe de objeto a criar.

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.

Utilize a função GetObject para aceder a um objeto ActiveX a partir de um ficheiro e atribuir o objeto a um 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"

Nota: 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 tiver registado como um objeto de instância única, só é criada uma instância do objeto, independentemente do número de vezes que CreateObject é 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 Excel (MyXL). Utiliza a propriedade Aplicação da folha de cálculo para tornar o Excel visível, para fechá-lo, etc. Ao utilizar duas chamadas à API, o procedimento Detetar Subexcel procura o 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 sinalizador ExcelWasNotRunning seja definido como Verdadeiro. A segunda chamada para GetObject especifica um ficheiro a abrir. Se o 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 de Automatização do Visual Basic. Em seguida, o código de exemplo torna o 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 Excel em execução, o código utiliza o métodoQuit do objeto Aplicação para fechar o 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

Precisa de mais ajuda?

Quer mais opções?

Explore os benefícios da subscrição, navegue em cursos de formação, saiba como proteger o seu dispositivo e muito mais.

As comunidades ajudam-no a colocar e a responder perguntas, a dar feedback e a ouvir especialistas com conhecimentos abrangentes.