Funktionen GetObject

Gäller för
Access för Microsoft 365 Access 2024 Access 2021 Access 2019 Access 2016

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 krävs klass .
klass Valfritt. Variant (sträng). En sträng som representerar objektets klass.

Argumentet klassanvänder syntaxen appname.objecttype och består av följande element:

Element Beskrivning
appname Obligatoriskt. Variant (sträng). Namnet på det program som tillhandahåller objektet.
objecttype Obligatoriskt. Variant (String). Den typ eller klass av objekt du vill skapa.

Kommentarer

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 programmet som är kopplat till den angivna sökvägen och objektet i den angivna filen aktiveras.

Om sökvägen är en sträng med längden noll ("") returnerar GetObject en ny objektinstans av den angivna typen. Om sökvägsargumentet utelämnas GetObject returnerar 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 ritning som heter SCHEMA.CAD:


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

Om du inte anger objektets klass avgör Automation vilket program som ska startas och vilket objekt 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. Använd det valfria klassargumentet för att ange vilket objekt i en fil som ska aktiveras. Till exempel:


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

I exemplet FIGMENT är namnet på ett ritprogram och DRAWING är en av de objekttyper som 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 GetObject returnerar alltid samma instans när den anropas med syntaxen sträng med längden noll (""), och den orsakar ett fel om sökvägsargumentet utelämnas. Du kan inte använda GetObject till att hämta en referens till en klass som skapats med Visual Basic.

Exempel

I det här exemplet används funktionen GetObject för att hämta en referens till ett specifikt Excel-kalkylblad (MyXL). Kalkylbladets Program-egenskap används för att göra Excel synligt, stänga det och så vidare. Med hjälp av två API-anrop letar underproceduren DetectExcel efter Excel och om den körs anges den i tabellen Objekt som körs. Det första anropet till GetObject orsakar ett fel om Microsoft Excel inte redan körs. I exemplet orsakar felet att flaggan ExcelWasNotRunning anges till Sant. Det andra anropet till GetObject anger en fil som ska öppnas. Om Excel inte redan körs startas det av det andra anropet och en referens till kalkylbladet som representeras av den angivna filen returneras, mytest.xls. Filen måste finnas på den angivna platsen. annars genereras Visual Basic-felautomatiseringsfelet. Sedan gör exempelkoden både Excel och fönstret som innehåller det angivna kalkylbladet synligt. Slutligen, om det inte fanns någon tidigare version av Excel som kördes, använder koden programobjektetsAvsluta-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 frigörs genom att ställa in den på Ingenting.


' 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