Funcția GetObject

Se aplică la
Access pentru Microsoft 365 Access 2024 Access 2021 Access 2019 Access 2016

Notă

Funcția, metoda, obiectul sau proprietatea descrisă în acest subiect este dezactivată dacă Microsoft Jet Expression Service rulează în modul sandbox, ceea ce împiedică evaluarea expresiilor potențial nesigure. Pentru mai multe informații despre modul sandbox, căutați "modul sandbox" în Ajutor.

Returnează o referință la un obiect furnizat de o componentă ActiveX.

Sintaxă

GetObject([numecale ] [, clasă ] )

Sintaxa funcției GetObject are următoarele argumente:

Argument Descriere
nume cale Opțional. Variant (șir). Calea completă și numele fișierului care conține obiectul de regăsit. Dacă numecale este omis, atunci clasă este obligatorie.
clasă Opțional. Variant (șir). Un șir reprezentând clasa obiectului.

Argumentul clasăutilizează sintaxa appname.objecttype și are următoarele componente:

Parte Descriere
Nume aplicație Obligatoriu. Variant (șir). Numele aplicației care furnizează obiectul.
tip obiect Obligatoriu. Variant (șir). Tipul sau clasa obiectului de creat.

Observații

Notă

Exemplele care urmează demonstrează utilizarea acestei funcții într-un modul Visual Basic for Applications (VBA). Pentru mai multe informații despre lucrul cu VBA, selectați Referințe pentru dezvoltatori în lista verticală de lângă Căutare și introduceți unul sau mai mulți termeni în caseta de căutare.

Utilizați funcția GetObject pentru a accesa un obiect ActiveX dintr-un fișier și a atribui obiectul unei variabile obiect. Utilizați instrucțiunea Set pentru a atribui obiectul returnat de GetObject la variabila obiect. De exemplu:


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

Atunci când se execută acest cod, aplicația asociată numelui de cale specificat este pornită și obiectul din fișierul specificat este activat.

Dacă pathname este un șir de lungime zero (""), GetObject returnează o instanță de obiect nouă de tipul specificat. Dacă argumentul numecale este omis, GetObject returnează un obiect activ în prezent de tipul specificat. Dacă nu există niciun obiect de tipul specificat, se produce o eroare.

Unele aplicații vă permit să activați o parte a unui fișier. Adăugați un semn de exclamare (!) la sfârșitul numelui de fișier și urmați-l cu un șir care identifică partea fișierului pe care doriți să îl activați. Pentru informații despre cum se creează acest șir, consultați documentația aplicației care a creat obiectul.

De exemplu, într-o aplicație de desen, este posibil să aveți mai multe straturi ale unui desen stocate într-un fișier. Puteți utiliza următorul cod pentru a activa un strat dintr-un desen numit SCHEMA.CAD:


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

Dacă nu specificați clasa obiectului, automatizarea determină aplicația care pornește și obiectul care se activează, pe baza numelui de fișier pe care îl furnizați. Unele fișiere, totuși, pot accepta mai multe clase de obiecte. De exemplu, un desen poate accepta trei tipuri diferite de obiecte: un obiect Aplicație , un obiect Desen și un obiect Bară de instrumente , toate făcând parte din același fișier. Pentru a specifica ce obiect dintr-un fișier doriți să activați, utilizați argumentul opțional de clasă . De exemplu:


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

În exemplu, FIGMENT este numele unei aplicații de desen și este unul dintre tipurile de obiecte DRAWING pe care le acceptă.

După ce un obiect este activat, puteți face referire la el în cod utilizând variabila obiect pe care ați definit-o. În exemplul precedent, accesați proprietățile și metodele noului obiect utilizând variabila MyObjectde obiect. De exemplu:


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

Notă

Utilizați funcția GetObject atunci când există o instanță curentă a obiectului sau dacă doriți să creați obiectul cu un fișier deja încărcat. Dacă nu există nicio instanță curentă și nu doriți ca obiectul să pornească cu un fișier încărcat, utilizați funcția CreateObject .

Dacă un obiect s-a înregistrat ca obiect cu o singură instanță, se creează o singură instanță a obiectului, indiferent de câte ori se execută CreateObject . Cu un obiect cu o singură instanță, GetObject returnează întotdeauna aceeași instanță atunci când este apelată cu sintaxa șir de lungime zero ("") și provoacă o eroare dacă argumentul nume cale este omis. Nu puteți utiliza GetObject pentru a obține o referință la o clasă creată cu Visual Basic.

Exemplu

Acest exemplu utilizează funcția GetObject pentru a obține o referință la o anumită foaie de lucru Excel (MyXL). Utilizează proprietatea Aplicație a foii de lucru pentru a face vizibil Excel, pentru a-l închide și așa mai departe. Utilizând două apeluri de API, procedura DetectExcel Sub caută Excel și, dacă rulează, îl introduce în tabelul de obiecte în execuție. Primul apel la GetObject provoacă o eroare dacă Microsoft Excel nu rulează deja. În exemplu, eroarea determină setarea semnalizării ExcelWasNotRunning la True (Adevărat). Al doilea apel către GetObject specifică un fișier de deschis. Dacă Excel nu rulează deja, al doilea apel îl pornește și returnează o referință la foaia de lucru reprezentată de fișierul specificat, mytest.xls. Fișierul trebuie să existe în locația specificată; În caz contrar, este generată eroarea Visual Basic Automatizare. În continuare, exemplul de cod face vizibile atât Excel, cât și fereastra care conține foaia de lucru specificată. În sfârșit, dacă nu rulează nicio versiune anterioară de Excel, codul utilizează metoda Quit a obiectului Application pentru a închide Excel. Dacă aplicația rula deja, nu se face nicio încercare de a o închide. Referința în sine este eliberată prin setarea sa la Nothing.


' 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