VBA GetObject

Funzione GETOBJECT di Excel VBA

Possiamo usare 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, è richiesto il secondo argomento 'class'.
  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. Objecttype: Specifichiamo il tipo di classe di oggetto da creare.

Esempio di funzione GETOBJECT di Excel VBA

Puoi scaricare questo modello GetObject VBA qui - Modello GetObject 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 usare la funzione 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 di visual basic 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.

  • Innanzitutto, 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 dice 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 che segue la 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, non esiste un'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 due righe di seguito 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, 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 indica "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 che ha 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 non ci sono tabelle nel documento, allora mostreremo all'utente una finestra di messaggio 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 apriremo 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 degli 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 loro 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 si esce dall'applicazione MS Word WdApp.Quit Rem Rilasciamo finalmente la memoria di sistema allocata per le 2 variabili oggetto = Niente impostato WdApp = Niente End SubEsci da Rem Abbiamo finalmente rilasciato la memoria di sistema allocata per le 2 variabili oggetto Set wddoc = Nothing Set WdApp = Nothing End SubEsci da Rem Finalmente 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 una sola istanza dell'oggetto, indipendentemente dal numero per cui viene eseguito CreateObject. La funzione GetObject in ogni momento restituisce la stessa istanza quando viene chiamata con una stringa di lunghezza zero e viene visualizzato un errore se l'argomento "pathname" non viene menzionato.
  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, prima usiamo la funzione CreateObject per creare l'oggetto e poi usiamo la funzione GetObject per accedere all'oggetto.