|
| La funzione CreateObject |
| La sintassi è CreateObject(nomeapplicazione.tipodioggetto).
Questa funzione permette di creare una nuova istanza di applicazione.
L'esempio seguente lancia Excel da un altro applicativo office.
|
|
Public AppXl as object
Sub creaoggetto()
Set AppXl = _
CreateObject("Excel.Application")
AppXl.visible = true
End sub
|
|
La prima istruzione dichiara una variabile pubblica di nome AppXl di tipo oggetto.
Il primo step della routine "creaoggetto" crea un'istanza dell'applicazione Excel e
la manda in esecuzione. Lo step successivo rende visibile l'applicazione. Omettendo
questa riga avremmo avviato l'applicazione senza vederla a video. Lanciare applicazioni
in background è utile in particolari situazioni, ad esempio quando non si vuole distrarre
l'attenzione dell'utente da alcuni processi.
|
|
| L'esempio appena visto potrebbe essere inserito in un modulo di codice su Word
per creare una nuova istanza dell'applicazione Excel. |
|
|
Oltre ad Excel avremmo potuto avviare Word, PowerPoint, Access, Visio, Outlook.
Inoltre con Excel e Word si possono creare anche altri tipi di oggetti ad esempio:
Excel.Sheet per manipolare fogli di lavoro o Excel.Chart per manipolare
grafici.
|
|
| La parola chiave New |
| La parola chiave New è un'alternativa all'istruzione CreateObject, la sintassi è:
|
|
Dim NomeAppicazione As New Excel.Application
|
| L'esempio dichiara una nuova istanza dell'oggetto applicazione Excel.
A differenza di CreateObject non ha bisogno dell'istruzione set, in quanto la nuova
istanza è caricata quando viene eseguita la prima istruzione riferita all'oggetto. |
|
| Istanze multiple |
| Nelle applicazioni Word, Excel ed Access ogni volta che usi la variabile CreateObject
viene creata una nuova istanza dell'oggetto. Ad esempio se eseguiamo 3 volte la routine "CreaOggetto",
vista nei paragrafi precedenti, avremo aperto 3 applicazioni Excel.
Diverso invece il comportamento di Outlook e PowerPoint. In questo caso se l'applicazione è in
già in uso, l'istruzione CreateObject restituisce lo stesso oggetto già caricato in memoria.
|
|
| Riferimento ad un oggetto già caricato o esistente |
| Nel caso vogliamo usare un'istanza di un oggetto già caricato, o caricare una
nuova istanza facendo riferimento ad un file già esistente
dovremmo usare la funzione GetObject.
La sintassi è:
|
|
GetObject(NomePercorso, ClasseApplicazione)
|
| NomePercorso indica il path del file che si vuole aprire (Es: "C:\documenti\prova.xls").
Se è presente solo il nome del file, VBA cerca il dataset nella cartella contenente il codice in esecuzione.
NomePercorso può essere omesso, in tal caso deve essere presente ClasseApplicazione. Questo indica a VBA che si
vuole usare l'istanza di un'applicazione già in esecuzione. |
|
Public AppXl as object
Sub PrendiOggetto()
Set AppXl = _
GetObject("C:\documenti\prova.xls")
End sub
|
| Nel caso invece specifichiamo il percorso e non la classe, VBA apre il file nel percorso specificato
avviando l'applicazione Office più adatta per il documento.
|
|
Public AppXl as object
Sub PrendiOggetto()
Set AppXl = _
GetObject(,"Excel.Application")
End sub
|
|
| Chiusura di una connessione |
| Quando vogliamo terminare la connessione ad un'altra applicazione office, come prima cosa
dobbiamo impostare la variabile oggetto creata con CreateObject, GetObject o New a "nothing".
In questo modo la nostra variabile viene svincolata dall'effettivo oggetto in memoria.
A questo punto usiamo il metodo quit per terminare l'applicazione che abbiamo
precedentemente avviato.
Segue un esempio di chiusura delle applicazioni aperte in precedenza.
|
|
Sub ChiudiOggetto()
Set AppXl = Nothing
AppXl.Quit
End Sub
|
|