Funzione GetObject

Si applica a
Access per Microsoft 365 Access 2024 Access 2021 Access 2019 Access 2016

Nota

La funzione, il metodo, la proprietà o l'oggetto descritto in questo argomento è disabilitato se Microsoft Jet Expression Service è in esecuzione in modalità sandbox, che impedisce la valutazione delle espressioni potenzialmente pericolose. Per altre informazioni sulla modalità sandbox, cercare "modalità sandbox" nella Guida.

Restituisce un riferimento a un oggetto fornito da un componente ActiveX.

Sintassi

GetObject([percorso] [, classe ] )

La sintassi della funzione GetObject ha gli argomenti seguenti:

Argomento Descrizione
percorso Facoltativo. Variant (String). Percorso completo e nome del file che contiene l'oggetto da recuperare. Se il nome del percorso viene omesso, la classe è obbligatoria.
classe Facoltativo. Variant (String). Stringa che rappresenta la classe dell'oggetto.

L'argomento classeusa la sintassi nomeapp.objecttipo e contiene le parti seguenti:

Parte Descrizione
nomeapplicazione Obbligatorio. Variant (String). Nome dell'applicazione che fornisce l'oggetto.
tipooggetto Obbligatorio. Variant (String). Tipo o classe dell'oggetto da creare.

Osservazioni

Nota

Gli esempi seguenti illustrano l'uso di questa funzione in un modulo di Visual Basic, Applications Edition (VBA). Per altre informazioni sull'uso di VBA, selezionare Riferimenti per sviluppatori nell'elenco a discesa accanto a Cerca e immettere uno o più termini nella casella di ricerca.

Utilizzare la funzione GetObject per accedere a un oggetto ActiveX da un file e assegnare l'oggetto a una variabile oggetto. Usare l'istruzione Set per assegnare l'oggetto restituito da GetObject alla variabile oggetto. Ad esempio:


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

Quando questo codice viene eseguito, l'applicazione associata al percorso specificato viene avviata e l'oggetto nel file specificato viene attivato.

Se pathname è una stringa di lunghezza zero (""), GetObject restituisce una nuova istanza dell'oggetto del tipo specificato. Se l'argomento percorso viene omesso, GetObject restituisce un oggetto attualmente attivo del tipo specificato. Se non esiste alcun oggetto del tipo specificato, viene restituito un errore.

Alcune applicazioni permettono di attivare parte di un file. Aggiungere un punto esclamativo (!) alla fine del nome file e farlo seguire da una stringa che identifichi la parte del file che si desidera attivare. Per informazioni su come creare questa stringa, vedere la documentazione per l'applicazione che ha creato l'oggetto.

In un'applicazione di disegno, ad esempio, possono essere presenti più livelli per un disegno archiviato in un file. Per attivare un layer all'interno di un disegno denominato SCHEMA.CAD:


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

Se non si specifica la classe dell'oggetto, Automation determina l'applicazione da avviare e l'oggetto da attivare, in base al nome file fornito. Alcuni file, tuttavia, possono supportare più di una classe dell'oggetto. Ad esempio, un disegno potrebbe supportare tre diversi tipi di oggetti: un oggetto Application, un oggetto Drawing e un oggettoToolbar, che fanno tutti parte dello stesso file. Per specificare quale oggetto in un file si desidera attivare, utilizzare l'argomento di classe facoltativo. Ad esempio:


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

Nell'esempio, FIGMENT è il nome di un'applicazione di disegno ed DRAWING è uno dei tipi di oggetto supportati.

Una volta attivato un oggetto, è possibile farvi riferimento nel codice usando la variabile oggetto definita. Nell'esempio precedente è possibile accedere alle proprietà e ai metodi del nuovo oggetto utilizzando la variabile MyObjectobject. Ad esempio:


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

Nota

Usare la funzione GetObject quando è presente un'istanza corrente dell'oggetto o se si vuole creare l'oggetto con un file già caricato. Se non è presente alcuna istanza corrente e non si vuole che l'oggetto venga avviato con un file caricato, usare la funzione CreateObject.

Se un oggetto ha registrato se stesso come oggetto a singola istanza, viene creata una sola istanza dell'oggetto, indipendentemente dal numero di volte per cui viene eseguita la funzione CreateObject. Con un oggetto a istanza singola, GetObject restituisce sempre la stessa istanza quando viene chiamato con la sintassi della stringa di lunghezza zero ("") e causa un errore se l'argomento del percorso viene omesso. Non è possibile usare GetObject per ottenere un riferimento a una classe creata con Visual Basic.

Esempio

In questo esempio viene utilizzata la funzione GetObject per ottenere un riferimento a uno specifico foglio di lavoro di Excel (MyXL). Usa la proprietà Application del foglio di lavoro per rendere Excel, per chiuderlo e così via. Utilizzando due chiamate API, la routine DetectExcel Sub cerca Excel e, se è in esecuzione, lo immette nella tabella Running Object. La prima chiamata a GetObject causa un errore se Microsoft Excel non è già in esecuzione. Nell'esempio l'errore causa l'impostazione del flag ExcelWasNotRunning su True. La seconda chiamata a GetObject specifica un file da aprire. Se Excel non è già in esecuzione, viene avviata dalla seconda chiamata che restituisce un riferimento al foglio di lavoro rappresentato dal file specificato, mytest.xls. Il file deve esistere nella posizione specificata; in caso contrario, viene generato l'errore di automazione di Visual Basic. Il codice di esempio rende quindi visibili sia Excel che la finestra contenente il foglio di lavoro specificato. Infine, se non è in esecuzione alcuna versione precedente di Excel, il codice usa il metodo Quit dell'oggetto Application per chiudere Excel. Se l'applicazione era già in esecuzione, non viene effettuato alcun tentativo di chiuderla. Il riferimento stesso viene rilasciato impostandolo su 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