VBA GetObject - Come utilizzare la funzione GetObject in Excel VBA?

Funzione GETOBJECT di Excel VBA

Possiamo utilizzare la funzione GetObject in VBA in MS Excel per accedere a un oggetto ActiveX dal file excel e quindi assegnare l'oggetto a una variabile oggetto. Per utilizzare la tecnologia OLE (Object Linking and Embedding) o COM (Compound Object Module) per controllare qualsiasi applicazione Microsoft come MS Word, MS Outlook, MS PowerPoint e Internet Explorer, ecc., Possiamo utilizzare la funzione VBA GETOBJECT.

Usiamo la funzione CreateObject per creare l'oggetto e la funzione GETOBJECT restituisce il riferimento all'oggetto.

Sintassi per la funzione GETOBJECT

La funzione GET OBJECT ha questi argomenti denominati:

  1. Pathname: dobbiamo specificare il percorso completo e il nome del file contenente l'oggetto da recuperare. Questo è un argomento opzionale, infatti, entrambi gli argomenti nella funzione GetObject sono opzionali, ma se "pathname" viene omesso, il secondo argomento "class" è obbligatorio.
  2. Classe : anche questo è un argomento opzionale come specificato in precedenza. Accetta una stringa che rappresenta la classe dell'oggetto.

Usiamo la sintassi "appname.objecttype" per specificare l'argomento "class".

  1. Appname: dobbiamo specificare il nome dell'applicazione, che fornirà l'oggetto.
  2. Tipo di oggetto: Specifichiamo il tipo di classe di oggetto da creare.

Esempio di funzione GETOBJECT di Excel VBA

Supponiamo di avere un documento word contenente 3 tabelle.

Vogliamo scrivere un codice VBA che importerà tutte le tabelle nel documento nel foglio Excel. Per fare lo stesso, dovremo utilizzare le funzioni CreateObject e GetObject in VBA.

I passaggi sarebbero:

  • Crea un file excel e salva il file con l'estensione excel .xlsm (cartella di lavoro abilitata per Excel) poiché avremo bisogno di eseguire il codice VBA (una macro).
  • Apri l'editor visuale di base con un tasto di scelta rapida (Alt + F11) o utilizzando il comando "Visual Basic" nel gruppo "Codice" nella scheda "Sviluppatore" in Excel.
  • Fare doppio clic su "ThisWorkbook" sul lato sinistro dell'editor VBA e scegliere "Workbook" dall'elenco mostrato di seguito nella parte superiore dello schermo.
  • Scegli "Apri" dall'elenco.
  • Ora dobbiamo scrivere il codice tra queste due righe.
  • Per prima cosa, dichiareremo le variabili per contenere gli oggetti (Documento MS Word e oggetto Applicazione MS Word) e una "Variabile stringa" per contenere il nome del documento da cui dobbiamo estrarre le tabelle.
  • Per la gestione degli errori, aggiungeremo un'istruzione. Questa istruzione indica al programma VBA di ignorare l'errore e riprendere l'esecuzione con la riga di codice successiva. L'istruzione "On Error Resume Next" non corregge gli errori di runtime, ma significa semplicemente che l'esecuzione del programma continuerà dalla riga successiva alla riga che ha causato l'errore.
  • Ora useremo la funzione GetObject per ottenere l'accesso all'istanza corrente di Word Application Object.
  • Se nel caso in cui non è presente alcuna istanza corrente dell'applicazione MS Word, o il componente ActiveX non può creare un oggetto o restituire un riferimento a questo oggetto, l'errore 429. Per questo, aggiungeremo sotto due righe nel codice. Dopo aver gestito l'errore, dobbiamo creare un'istanza dell'oggetto Applicazione MS Word utilizzando la funzione CreateObject .
  • Per rendere visibile l'applicazione MS Word, cambieremo la proprietà visible dell'oggetto 'WdApp' in TRUE .
  • Dobbiamo trovare la posizione e il nome del file del documento word da cui vogliamo importare le tabelle in un foglio Excel e assegnare lo stesso a "strDocName" Per trovare il nome e la posizione, e possiamo controllare le proprietà del file.

Per aprire la finestra di dialogo "Proprietà" , seleziona il file e premi "Alt + Invio".

  • Se il file non esiste nella posizione specificata, il codice restituisce il messaggio che dice "Il file Marks Details non è stato trovato nel percorso della cartella". Il titolo sarebbe "Spiacenti, il nome del documento non esiste".
  • Ora dobbiamo attivare l'applicazione MS Word e assegnare la variabile "wddoc" con il documento word con il nome del file memorizzato in "strDocName".
  • Se il file non è già aperto, è necessario aprire il documento e attivare l'app.
  • Dopo aver attivato il documento word, dobbiamo accedere alle tabelle nel documento. Per fare lo stesso, creeremo alcune variabili.

Tble è la variabile intera, che memorizzerà il conteggio delle tabelle nel documento.

rowWd è la variabile lunga, che memorizzerà il numero di righe in una particolare tabella.

colWd è la variabile long, che memorizzerà il numero di colonne in una particolare tabella.

  • Dobbiamo contare il numero di tabelle nel documento e, se sono presenti nel documento, visualizzeremo una finestra di messaggio per l'utente che dice "Nessuna tabella trovata nel documento di Word".
  • Per accedere alle tabelle nel documento e scrivere il contenuto nel foglio excel, eseguiremo un ciclo VBA 'For' per un numero di tabelle volte e all'interno di questo ciclo VBA, eseguiremo cicli 'for' annidati per accedere a ogni riga e ogni colonna nella riga.
  • Poiché non vogliamo salvare il documento e chiudere l'applicazione. Dovremmo anche liberare la memoria del sistema. Per fare lo stesso, scriveremo il seguente codice.

Ora, ogni volta che apriamo il file excel, il riempimento viene aggiornato con il contenuto della tabella dal documento word.

Codice:

Private Sub Workbook_Open () Rem Dichiarazione di variabili oggetto per accedere all'oggetto creato da GETOBJECT Dim WdApp As Object, wddoc As Object Rem Dichiarazione di una variabile stringa per accedere al documento Word Dim strDocName As String Rem Gestione errori In caso di errore Riprendi Next Rem Attivazione di MS Word se è già aperto Set WdApp = GetObject (, "Word.Application") If Err.Number = 429 Allora Err.Clear Rem Creazione di un oggetto applicazione Word se MS Word non è già aperto Set WdApp = CreateObject ("Word.Application") Fine If WdApp.Visible = True strDocName = "C: Users CBA7_01 Desktop Marks Details.docx" Rem Controllo della directory pertinente per il documento pertinente Rem Se non trovato, informa l'utente e chiude il programma If Dir (strDocName) = " "Quindi MsgBox" Il file "& strDocName & vbCrLf &"non è stato trovato nel percorso della cartella "& vbCrLf &" C: Users CBA7_01 . ", _vbExclamation," Spiacente, il nome del documento non esiste. "Exit Sub End If WdApp.Activate Set wddoc = WdApp.Documents (strDocName ) Se wddoc non è nulla, impostare wddoc = WdApp.Documents.Open ("C: Users CBA7_01 Desktop Marks Details.docx") wddoc.Activate Rem Definizione delle variabili per accedere alle tabelle nel documento word Dim Tble As Integer Dim rowWd As Long Dim colWd As Integer Dim x As Long, y As Long x = 1 y = 1 Con wddoc Tble = wddoc.Tables.Count If Tble = 0 Allora MsgBox "Nessuna tabella trovata nel documento di Word", vbExclamation, "No Tabelle da importare "Exit Sub End If Rem Avvio del processo di loop per accedere alle tabelle e alle relative righe, colonne For i = 1 To Tble With.Tables (i) For rowWd = 1 To .Rows.Count For colWd = 1 To .Columns.Count Cells (x, y) = WorksheetFunction.Clean (.cell (rowWd, colWd) .Range.Text) Rem Accesso alla colonna successiva y = y + 1 Next colWd Rem Andare alla riga successiva e iniziare dalla colonna 1 y = 1 x = x + 1 Riga successiva Wd End With Next End Con Rem non è necessario salvare il documento word wddoc.Close Savechanges: = False Rem usciamo dall'applicazione MS Word WdApp.Quit Rem Rilasciamo finalmente la memoria di sistema allocata per le 2 variabili oggetto Set wddoc = Niente impostato WdApp = Niente End SubEsci da Rem Finalmente rilasciamo la memoria di sistema allocata per le 2 variabili oggetto Set wddoc = Nothing Set WdApp = Nothing End SubEsci da Rem Alla fine rilasciamo la memoria di sistema allocata per le 2 variabili oggetto Set wddoc = Nothing Set WdApp = Nothing End Sub

Cose da ricordare

  1. Esiste un oggetto a istanza singola, per il quale viene generata solo un'istanza dell'oggetto, indipendentemente dal numero per cui viene eseguito CreateObject. La funzione GetObject restituisce sempre la stessa istanza quando viene chiamata con una stringa di lunghezza zero e viene visualizzato un errore se non viene menzionato l'argomento "pathname".
  2. Non è possibile utilizzare GetObject per accedere a un riferimento a una classe creata con VBA.
  3. Se nel caso, non c'è un'istanza attiva dell'applicazione MS Word, o non vogliamo che l'oggetto sia avviato con un file già caricato, allora usiamo prima la funzione CreateObject per creare l'oggetto e poi usiamo la funzione GetObject per accedere all'oggetto .

Articoli interessanti...