Devolve uma referência a um objecto fornecida por um componente ActiveX.
Sintaxe
GetObject([nomecaminho ] [
, classe ] )
A sintaxe da função GetObject tem os seguintes argumentos (argumento: valor que fornece informações a uma acção, evento, método, propriedade, função ou procedimento.):
O argumento (argumento: valor que fornece informações a uma acção, evento, método, propriedade, função ou procedimento.) classe utiliza a sintaxe nomeaplic.tipodeobjecto e é composto por três partes:
| Parte |
Descrição |
| nomeaplic |
Obrigatório. Variante (Cadeia). O nome da aplicação que fornece o objecto. |
| tipodeobjecto |
Obrigatório. Variante (Cadeia). O tipo ou classe do objecto a criar. |
Observações
Nota Os exemplos que se seguem demonstram a utilização desta função num módulo do Visual Basic for Applications (VBA). Para mais informações sobre como trabalhar com VBA, seleccione Referência para Programadores na lista pendente junto a Procurar e introduza um ou mais termos na caixa de procura.
Utilize a função GetObject para aceder a um objecto ActiveX a partir de um ficheiro e atribuir o objecto a uma variável de objecto (variável de objecto: variável que contém uma referência a um objecto.). Utilize a instrução Set para atribuir o objecto devolvido por GetObject à variável de objecto. Por exemplo:
Dim CADObject As Object
Set CADObject = GetObject("C:\CAD\SCHEMA.CAD")
Quando este código é executado, a aplicação associada ao nomecaminho especificado é iniciada e o objecto existente no ficheiro especificado é activado.
Se nomecaminho for uma cadeia de comprimento zero (""), GetObject devolve uma nova instância de objecto do tipo especificado. Se o argumento nomecaminho for omitido, GetObject devolve um objecto activo actualmente do tipo especificado. Se não existir nenhum objecto do tipo especificado, ocorre um erro.
Algumas aplicações permitem-lhe activar parte de um ficheiro. Adicione um ponto de exclamação (!) no final do nome do ficheiro e, de seguida, uma cadeia que identifique a parte do ficheiro que pretende activar. Para obter informações sobre como criar esta cadeia, consulte a documentação para a aplicação que criou o objecto.
Por exemplo, numa aplicaçõ de desenho pode ter diversas camadas num desenho armzenado num ficheiro. É possível utilizar o seguinte código para activar uma camada num desenho chamado SCHEMA.CAD:
Set LayerObject = GetObject("C:\CAD\SCHEMA.CAD!Layer3")
Se não especificar a classe do objecto, a Automatização determina o início da aplicação e a activação do objecto, com base no nome do ficheiro fornecido. Alguns ficheiros, no entanto, podem suportar mais do que uma classe de objecto. Por exemplo, um desenho pode suportar três tipos diferentes de objecto: um objecto Aplicação, um objecto Desenho e um objecto Barra de Ferramentas, os quais pertencem todos ao mesmo ficheiro. Para especificar qual o objecto de um ficheiro pretende activar, utilize o argumento 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 objecto que suporta.
Depois de um objecto ser activado, é referenciado no código utilizando a variável de objecto que definiu. No exemplo anterior, acede às prorpiedades (propriedade: um determinado atributo de um controlo, campo ou objecto definido para especificar uma das características do objecto (como o tamanho, cor ou localização no ecrã) ou um aspecto do respectivo comportamento (como se o objecto estivesse oculto).) e aos métodos (método: procedimento semelhante a uma instrução ou função que opera em objectos específicos. Por exemplo, pode aplicar o método Print ao objecto Debug para transferir a impressão para a janela Immediate.) do novo objecto utilizando a variável de objecto 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 actual do objecto se pretender criar o objecto com um ficheiro já carregado. se não existir uma ocorrência actual e não quiser que o objecto seja iniciado com um ficheiro carregado, utilize a função CreateObject.
Se um objecto se tiver registado a si próprio como um objecto de instância única, só é criada uma instância do objecto, independentemente do número de vezes que a função CreateObject é executada. Com um objecto de instância única, a função GetObject devolve sempre a mesma instância quando é chamada com a sintaxe de cadeia de comprimento zero ("") e causa um erro se o argumento nomecaminho for omitido. Não é possível 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 trabalho específica do Microsoft Office Excel 2007 (MyXL). Utiliza a propriedade Aplicação da folha de trabalho para tornar o Excel visível, fechá-lo, etc. Utilizando duas chamadas API, o procedimento Sub de Sub procedimento DetectarExcel procura o Excel e se este estiver em execução, introduz o Excel na Tabela de Objectos em Execução. A primeira chamada para GetObject causa um erro se o Microsoft Excel não estiver em execução. No exemplo, o erro faz com que o sinalizador ExcelNãoEstáEmExecução seja definido como Verdadeiro. A segunda chamada para GetObject especifica a abertura de um ficheiro. Se o Excel não estiver em execução, a segunda chamada inicia-o e devolve uma referência à folha de trabalho representada pelo ficheiro especificado, mytest.xls. O ficheiro tem de existir na localização especificada; se assim não for, é gerado o erro de Automatização do Visual Basic. Em seguida, o código do exemplo torna visíveis o Excel e a janela que contém a folha de trabalho especificada. Por último, se não existir uma versão antrior do Excel em execução, o código utiliza o método Sair do objecto Aplicação para fechar o Excel. Se a aplicação já estava em execução, não é efectuada nenhuma tentativa para a fechar. A referência propriamente dita é libertada ao ser definida 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