Funkcija GetObject

Primjenjuje se na
Access za Microsoft 365 Access 2024 Access 2021 Access 2019 Access 2016

Napomena

Funkcija, metoda, objekt ili svojstvo opisani u ovoj temi onemogućeni su ako je servis izraza Microsoft Jet pokrenut u načinu rada s memorijom za testiranje, što sprječava procjenu potencijalno nesigurnih izraza. Dodatne informacije o načinu rada s memorijom za testiranje potražite u pomoći "način rada s memorijom za testiranje".

Vraća referencu na objekt koji nudi ActiveX komponenta.

Sintaksa

GetObject([nazivputa ] [, klasa ] )

Sintaksa funkcije GetObject sadrži ove argumente:

Argument Opis
nazivputa Neobavezno. Variant (niz). Cijeli put i naziv datoteke koja sadrži objekt koji će se dohvatiti. Ako se Naziv puta izostavi, klasa je obavezna.
klasa Neobavezno. Variant (niz). Niz koji predstavlja klasu objekta.

Argument classkoristi sintaksu appname.objecttype i sastoji se od sljedećih dijelova:

Dio Opis
naziv aplikacije Obavezno. Variant (niz). Naziv aplikacije koja sadrži objekt.
vrstaobjekta Obavezno. Variant (niz). Vrsta ili klasa objekta koji će se stvoriti.

Napomene

Napomena

Primjeri koji slijede prikazuju korištenje te funkcije u modulu jezika Visual Basic for Applications (VBA). Da biste pronašli dodatne informacije o radu s VBA-om, na padajućem popisu uz stavku Traži odaberite stavku Referenca za razvojne inženjere pa unesite jedan ili više izraza u okvir pretraživanja.

Pomoću funkcije GetObject pristupite ActiveX objektu iz datoteke i dodijelite ga varijabli objekta. Naredbu Set koristite za dodjelu objekta koji je vratila funkcija GetObject varijabli objekta. Na primjer:


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

Kada se taj kod izvrši, pokreće se aplikacija pridružena navedenom nazivputu i aktivira se objekt u navedenoj datoteci.

Ako je PathName niz nulte duljine (""), GetObject vraća novu instancu objekta navedene vrste. Ako se argument pathname izostavi, GetObject vraća trenutno aktivan objekt navedene vrste. Ako nema objekata navedene vrste, doći će do pogreške.

Neke aplikacije omogućuju aktivaciju dijela datoteke. Na kraj naziva datoteke dodajte uskličnik (!), a zatim niz koji identificira dio datoteke koji želite aktivirati. Upute za stvaranje tog niza potražite u dokumentaciji aplikacije u kojoj je objekt stvoren.

U aplikaciji za crtanje, primjerice, možete imati više slojeva crteža pohranjenog u datoteci. Za aktivaciju sloja unutar crteža pod nazivom SCHEMA.CADmožete koristiti sljedeći kod:


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

Ako ne navedete klasu objekta, automatizacija na temelju naziva datoteke koji unesete određuje koja će se aplikacija pokrenuti i koji objekt aktivira. No neke datoteke mogu podržavati više od jedne klase objekata. Crtež može, primjerice, podržavati tri različite vrste objekata: objekt aplikacije, crtežni objekt i objekt alatne trake, koji su svi dijelovi iste datoteke. Da biste odredili koji objekt u datoteci želite aktivirati, koristite neobavezni argument klase . Na primjer:


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

U ovom je primjeru FIGMENT naziv aplikacije za crtanje te DRAWING je jedna od vrsta objekata koje podržava.

Kada aktivirate objekt, referencirajte ga u kodu pomoću definirane varijable objekta. U prethodnom primjeru svojstvima i metodama novog objekta pristupate pomoću varijable MyObjectobjekta. Na primjer:


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

Napomena

Funkciju GetObject koristite kada postoji trenutna instanca objekta ili ako želite stvoriti objekt s već učitanom datotekom. Ako trenutno nema instance i ne želite da se objekt pokreće s učitanom datotekom, koristite funkciju CreateObject .

Ako se objekt registrirao kao objekt s jednom instancom, stvara se samo jedna instanca objekta, bez obzira koliko se puta CreateObject izvršava. Kada je riječ o objektu s jednom instancom, GetObject uvijek vraća istu instancu kada se poziva uz sintaksu niza nulte duljine ("") i uzrokuje pogrešku ako se argument pathname izostavi. GetObject ne možete koristiti za dobivanje reference na klasu stvorenu pomoću Visual Basica.

Primjer

U ovom se primjeru koristi funkcija GetObject da bi se dobila referenca na određeni radni list programa Excel (MyXL). Excel koristi pomoću svojstva Application radnog lista da bi Excel postao vidljiv, zatvorio ga itd. Pomoću dvaju poziva API-ja podprocedura DetectExcel traži Excel i ako je pokrenuta, unosi ga u tablicu pokrenutih objekata. Prvi poziv na GetObject uzrokuje pogrešku ako Microsoft Excel nije već pokrenut. U ovom primjeru pogreška uzrokuje postavljanje zastavice ExcelWasNotRunning na True. Drugi poziv za GetObject određuje datoteku koja će se otvoriti. Ako Excel još nije pokrenut, drugi poziv ga pokreće i vraća referencu na radni list koji predstavlja navedena datoteka – mytest.xls. Datoteka se mora nalaziti na određenom mjestu; u suprotnom se generira pogreška modula Visual Basic Automatizacija. Nakon toga, primjer koda čini vidljivima i Excel i prozor koji sadrži navedeni radni list. Ako nije bila pokrenuta starija verzija programa Excel, kod koristi metodu zatvaranja objekta aplikacije da bi zatvorio Excel. Ako je aplikacija već bila pokrenuta, nije učinjen pokušaj da se zatvori. Sama referenca oslobađa se postavljanjem na Ništa.


' 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