VBA GetObject - Cum se utilizează funcția GetObject în Excel VBA?

Funcția Excel VBA GETOBJECT

Putem utiliza funcția GetObject în VBA în MS Excel pentru a accesa un obiect ActiveX din fișierul Excel și apoi atribui obiectul unei variabile de obiect. Pentru a utiliza tehnologia OLE (Object Linking and Embedding) sau COM (Compound Object Module) pentru a controla orice aplicație Microsoft precum MS Word, MS Outlook, MS PowerPoint și Internet Explorer etc., putem folosi funcția VBA GETOBJECT.

Folosim funcția CreateObject pentru a crea obiectul, iar funcția GETOBJECT returnează referința la obiect.

Sintaxa pentru funcția GETOBJECT

Funcția GET OBJECT are aceste argumente denumite:

  1. Calea: trebuie să specificăm calea completă și numele fișierului care conține obiectul de recuperat. Acesta este un argument opțional, de fapt, ambele argumente din funcția GetObject sunt opționale, dar dacă se omite „nume de cale”, este necesar al doilea argument „clasă”.
  2. Clasă : Acesta este, de asemenea, un argument opțional, așa cum s-a specificat anterior. Aceasta acceptă un șir care reprezintă clasa obiectului.

Folosim sintaxa „appname.objecttype” pentru a specifica argumentul „class”.

  1. Nume aplicație: trebuie să specificăm numele aplicației, care va furniza obiectul.
  2. Tipul obiectului: specificăm tipul clasei de obiect de creat.

Exemplu de funcție Excel VBA GETOBJECT

Să presupunem că avem un document Word care conține 3 tabele.

Vrem să scriem un cod VBA care va importa toate tabelele din document în foaia Excel. Pentru a face același lucru, va trebui să folosim funcțiile CreateObject și GetObject în VBA.

Pașii ar fi:

  • Creați un fișier excel și salvați fișierul cu extensia .xlsm excel (Excel Macro-Enabled Workbook) deoarece va trebui să rulăm codul VBA (o macro).
  • Deschideți editorul vizual de bază cu o tastă rapidă (Alt + F11) sau utilizând comanda „Visual Basic” din grupul „Cod” din fila „Dezvoltator” în Excel.
  • Faceți dublu clic pe „ThisWorkbook” din partea stângă a editorului VBA și alegeți „Workbook” din lista afișată ulterior în partea de sus a ecranului.
  • Alegeți „Deschideți” din listă.
  • Acum trebuie să scriem codul între aceste două linii.
  • În primul rând, vom declara variabile pentru a ține obiectele (documentul MS Word și obiectul aplicației MS Word) și o „Variabilă de șir” pentru a ține numele documentului de unde trebuie să extragem tabelele.
  • Pentru tratarea erorilor, vom adăuga o declarație. Această declarație spune programului VBA să ignore eroarea și să reia execuția cu următoarea linie de cod. Instrucțiunea „On Error Resume Next” nu remediază erorile de rulare, dar înseamnă pur și simplu că executarea programului va continua de la linia care urmează linia care a provocat eroarea.
  • Acum vom folosi funcția GetObject pentru a obține acces la instanța curentă a obiectului Word Application.
  • Dacă în cazul în care nu există nicio instanță curentă a aplicației MS Word sau componenta ActiveX nu poate crea un obiect sau să returneze referința la acest obiect, atunci eroarea 429. Pentru aceasta, vom adăuga mai jos două linii în cod. După gestionarea erorii, trebuie să creăm o instanță a obiectului MS Word Application utilizând funcția CreateObject .
  • Pentru a face vizibilă aplicația MS Word, vom schimba proprietatea vizibilă a obiectului „WdApp” la TRUE .
  • Trebuie să găsim locația și numele de fișier al documentului pe cuvânt de la care dorim să importe tabelele într - o foaie de Excel și atribui aceeași la „strDocName“ Pentru a găsi numele și locația, și putem verifica proprietățile din cele fişier.

Pentru a deschide caseta de dialog „Proprietăți” , trebuie doar să selectați fișierul și să apăsați „Alt + Enter”.

  • Dacă fișierul nu există în locația specificată, atunci codul returnează mesajul cu mențiunea „Fișierul marchează detalii nu a fost găsit în calea folderului”. Titlul ar fi „Ne pare rău, numele documentului respectiv nu există”.
  • Acum trebuie să activăm aplicația MS Word și să atribuim variabila „wddoc” cu documentul Word care are numele fișierului stocat în „strDocName”.
  • Dacă fișierul nu este deja deschis, atunci trebuie să deschidem documentul și să activăm aplicația.
  • După activarea documentului Word, trebuie să accesăm tabelele din document. Pentru a face același lucru, vom crea câteva variabile.

Tble este variabila întreagă, care va stoca numărul de tabele în document.

rowWd este variabila lungă, care va stoca numărul de rânduri într-un anumit tabel.

colWd este variabila lungă, care va stoca numărul de coloane într-un anumit tabel.

  • Trebuie să numărăm numărul de tabele din document și, dacă există un document notabil, atunci vom afișa utilizatorului o casetă de mesaj „Nu s-au găsit tabele în documentul Word”.
  • Pentru a accesa tabelele din document și pentru a scrie conținutul în foaia Excel, vom rula o buclă VBA „Pentru” de mai multe ori tabele, iar în cadrul acestei bucle VBA, vom rula bucle imbricate „pentru„ pentru a accesa fiecare rând și fiecare coloană din rând.
  • Deoarece nu dorim să salvăm documentul și să ieșim din aplicație. De asemenea, ar trebui să eliberăm memoria sistemului. Pentru a face același lucru, vom scrie următorul cod.

Now, whenever we open the excel file, the fill is updated with table content from the word document.

Code:

Private Sub Workbook_Open() Rem Declaring Object variables to access object created by GETOBJECT Dim WdApp As Object, wddoc As Object Rem Declaring a string variable to access the Word document Dim strDocName As String Rem Error handling On Error Resume Next Rem Activating MS Word if it is already opened Set WdApp = GetObject(, "Word.Application") If Err.Number = 429 Then Err.Clear Rem Creating a Word application object if MS Word is not already opened Set WdApp = CreateObject("Word.Application") End If WdApp.Visible = True strDocName = "C:UsersCBA7_01DesktopMarks Details.docx" Rem Checking relevant directory for the relevant document Rem If not found then informing the user and closing the program If Dir(strDocName) = "" Then MsgBox "The file " & strDocName & vbCrLf & "was not found in the folder path" & vbCrLf & "C:UsersCBA7_01.", _vbExclamation, "Sorry, that document name does not exist." Exit Sub End If WdApp.Activate Set wddoc = WdApp.Documents(strDocName) If wddoc Is Nothing Then Set wddoc = WdApp.Documents.Open("C:UsersCBA7_01DesktopMarks Details.docx") wddoc.Activate Rem Defining variables to access the tables in the word document Dim Tble As Integer Dim rowWd As Long Dim colWd As Integer Dim x As Long, y As Long x = 1 y = 1 With wddoc Tble = wddoc.Tables.Count If Tble = 0 Then MsgBox "No Tables found in the Word document", vbExclamation, "No Tables to Import" Exit Sub End If Rem Starting the looping process to access tables and their rows, columns 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 Accessing next column y = y + 1 Next colWd Rem Going to next row and start from column 1 y = 1 x = x + 1 Next rowWd End With Next End With Rem we do not need to save the word document wddoc.Close Savechanges:=False Rem we quit MS Word application WdApp.Quit Rem We finally release system memory allocated for the 2 object variables Set wddoc = Nothing Set WdApp = Nothing End Sub

Lucruri de amintit

  1. Există un obiect cu o singură instanță, pentru care este generată o singură instanță a obiectului, indiferent de numărul pentru care este rulat CreateObject. Funcția GetObject returnează în permanență aceeași instanță atunci când este apelată cu un șir de lungime zero și apare o eroare dacă argumentul „calea” nu este menționat.
  2. Nu putem folosi GetObject pentru a accesa o referință la o clasă creată cu VBA.
  3. Dacă, în caz, nu există nicio instanță activă a aplicației MS Word sau nu vrem obiectul inițiat cu un fișier deja încărcat, atunci folosim mai întâi funcția CreateObject pentru a crea obiectul și apoi folosim funcția GetObject pentru a accesa obiectul .

Articole interesante...