Funktionen GetObject

Obs!: Funktionen, metoden, objektet eller egenskapen som beskrivs i det här avsnittet inaktiveras om Microsoft Jet Expression Service körs i begränsat läge, vilket förhindrar utvärderingen av potentiellt osäkra uttryck. Om du vill ha mer information om begränsat läge söker du efter "begränsat läge" i hjälpdokumentationen.

Returnerar en referens till ett objekt som tillhandahålls av en ActiveX-komponent.

Syntax

GetObject([sökväg ] [, klass ] )

GetObject-funktionens syntax har följande argument:

Argument

Beskrivning

sökväg

Valfritt. Variant (String). Den fullständiga sökvägen till och namnet på den fil som innehåller det objekt som ska hämtas. Om sökväg utelämnas är klass obligatoriskt.

klass

Valfritt. Variant (String). En sträng som representerar objektets klass.


Argumentet klassargument använder syntaxen programnamn.objekttyp och har följande delar:

Del

Beskrivning

programnamn

Obligatoriskt. Variant (String). Namnet på det program som tillhandahåller objektet.

objekttyp

Obligatoriskt. Variant (String). Den typ eller klass av objekt du vill skapa.


Anmärkningar

Obs!: I exemplen nedan visar vi hur du använder den här funktionen i en Visual Basic for Applications-modul (VBA). Om du vill läsa mer om hur man använder VBA, kan du välja Info för utvecklare i listrutan bredvid Sök och sedan skriva en eller flera söktermer i sökrutan.

Använd funktionen GetObject för att komma åt ett ActiveX-objekt från en fil och tilldela objektet till en objektvariabel. Använd satsen Set för att tilldela objekt som returneras av GetObject till objektvariabeln. Till exempel:

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

När den här koden körs, startas det program som är kopplat till angiven sökväg och objekt i den angivna filen aktiveras.

Om sökväg är en sträng med längden noll (""), returnerar GetObject en ny objektinstans av den angivna typen. Om argumentet sökväg utelämnas returnerar GetObject ett aktivt objektet av den angivna typen. Om det inte finns något objekt med den angivna typen, uppstår ett fel.

Vissa program tillåter att du aktiverar en del av en fil. Lägg till ett utropstecken (!) i slutet av filnamnet och därefter en sträng som identifierar den del av filen du vill aktivera. Information om hur du skapar den här strängen finns i dokumentationen för det program som skapade objektet.

I ett ritprogram kan du till exempel ha flera lager i en teckning som lagras i en fil. Du kan använda följande kod för att aktivera ett lager i en teckning som heter SCHEMA.CAD:

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

Om du inte anger objektets klass, avgörs automatiskt vilket program som ska startas och vilket objektet som ska aktiveras, baserat på det filnamn du anger. Vissa filer kan dock ha stöd för fler än en objektklass. En teckning kan till exempel ha stöd för tre olika typer av objekt: ett programobjekt, ett ritobjekt och ett verktygsfältsobjekt, som alla är delar av samma fil. Om du vill ange vilket objekt i en fil som du vill aktivera använder du det valfria argumentet klass. Till exempel:

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

I exemplet är FIGMENT namnet på ett ritprogram och DRAWING är en av de objekttyper programmet stöder.

När ett objekt har aktiverats kan du referera till det i koden genom att använda den objektvariabel du har definierat. I exemplet ovan kommer du åt egenskaper och metoder för det nya objektet med hjälp av objektvariabeln MyObject. Till exempel:

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

Obs!:  Använd funktionen GetObject när det finns en aktiv instans av objektet eller om du vill skapa objektet med en fil som redan har lästs in. Om det inte finns någon aktuell instans, och du inte vill att objektet ska startas med en fil som lästs in, använder du funktionen CreateObject.

Om ett objekt har registrerat sig själv som ett objekt med en enstaka instans skapas bara en förekomst av objektet, oavsett hur många gånger CreateObject körs. Med en objekt med en enstaka instans returnerar GetObject alltid samma instans när funktionen anropas med en syntax med en sträng med längden noll (""), och den orsakar ett fel om argumentet sökväg utelämnas. Du kan inte använda GetObject till att hämta en referens till en klass som skapats med Visual Basic.

Exempel

Det här exemplet använder funktionen GetObject till att hämta en referens till ett specifikt Microsoft Office Excel 2007-kalkylblad (MyXL). Den använder kalkylbladets egenskap Application för att visa Excel, för att stänga programmet och så vidare. Med hjälp av två API-anrop letar subrutinen DetectExcel efter Excel, och om programmet körs anges det i objekttabellen. Det första anropet till GetObject orsakar ett fel om Microsoft Excel inte redan är igång. I exemplet orsakar felet att flaggan ExcelWasNotRunning anges till True. Det andra anropet till GetObject anger vilken fil som ska öppnas. Om Excel inte redan är igång, startas programmet av det andra anropet. Anropet returnerar en referens till det kalkylblad som representeras av den angivna filen mytest.xls. Filen måste finnas i den angivna platsen. Annars genereras Visual Basic-felet Automation-fel. Sedan gör koden både Excel och det fönster som innehåller det angivna kalkylbladet synliga. Slutligen: om ingen tidigare version av Excel kördes, använder koden programobjektetsQuit-metod för att stänga Excel. Om programmet redan kördes, görs inget försök att stänga det. Själva referensen släpps genom att ange den till Inget.

' 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
Utöka dina kunskaper
Utforska utbildning
Få nya funktioner först
Anslut till Office Insiders

Hade du nytta av den här informationen?

Tack för din feedback!

Tack för din feedback! Det låter som att det kan vara bra att koppla dig till en av våra Office-supportrepresentanter.

×