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 percorso viene omesso, classe è obbligatorio. |
classe |
Facoltativo. Variant (String). Stringa che rappresenta la classe dell'oggetto. |
L'argomentoclasse usa la sintassi nomeapp.tipooggetto ed è costituito da queste parti:
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.
Usare 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, viene avviata l'applicazione associata all'argomento percorso specificato e viene attivato l'oggetto nel file specificato.
Se percorso è 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 del file, seguito da una stringa che identifica la parte del file che si vuole 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. In questo caso, è possibile usare il codice seguente per attivare un livello all'interno di un disegno chiamato SCHEMA.CAD:
Set LayerObject = GetObject("C:\CAD\SCHEMA.CAD!Layer3")
Se non si specifica l'argomento classe dell'oggetto, l'automazione determina l'applicazione da avviare e l'oggetto da attivare in base al nome file specificato. 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 l'oggetto da attivare in un file, usare l'argomento 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 e DRAWING è uno dei tipi di oggetto supportati dall'applicazione.
Una volta attivato un oggetto, è possibile farvi riferimento nel codice usando la variabile oggetto definita. Per accedere alle proprietà e ai metodi del nuovo oggetto nell'esempio precedente, è possibile usare la variabile oggetto MyObject. 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 singola istanza, la funzione GetObject restituisce sempre la stessa istanza se viene chiamata con la sintassi della stringa di lunghezza zero ("") e restituisce un errore se viene omesso l'argomento percorso. Non è possibile usare GetObject per ottenere un riferimento a una classe creata con Visual Basic.
Esempio
Questo esempio usa la funzione GetObject per ottenere un riferimento a un foglio di lavoro di Excel specifico (MyXL). Usa la proprietà Application del foglio di lavoro per rendere visibile Excel, chiuderlo e così via. Usando due chiamate API, la routine DetectExcel Sub cerca Excel e, se è in esecuzione, lo immette nella tabella degli oggetti in esecuzione. 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, la seconda chiamata la avvia e restituisce un riferimento al foglio di lavoro rappresentato dal file specificato, mytest.xls. Il file deve essere presente nel percorso specificato; in caso contrario, viene generato l'errore di automazione degli errori di Visual Basic. Il codice di esempio rende quindi visibili sia Excel che la finestra che contiene 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 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