VBA GetObject - Kako koristiti funkciju GetObject u programu Excel VBA?

Excel VBA GETOBJECT funkcija

Možemo koristiti funkciju GetObject u VBA u MS Excelu za pristup ActiveX objektu iz excel datoteke, a zatim dodijeliti objekt varijabli objekta. Da bismo koristili OLE (Object Linking and Embedding) ili COM (Compound Object Module) tehnologiju za kontrolu bilo koje Microsoftove aplikacije poput MS Word, MS Outlook, MS PowerPoint i Internet Explorer, itd., Možemo koristiti funkciju VBA GETOBJECT.

Za izradu objekta koristimo funkciju CreateObject, a funkcija GETOBJECT vraća referencu na objekt.

Sintaksa za funkciju GETOBJECT

Funkcija GET OBJECT ima ove imenovane argumente:

  1. Naziv puta: Moramo navesti puni put i ime datoteke koja sadrži objekt za dohvaćanje. Ovo je neobavezan argument, zapravo su oba argumenta u funkciji GetObject neobavezna, ali ako je "pathname" izostavljen, potreban je drugi argument "class".
  2. Klasa : Ovo je također neobavezni argument kako je ranije navedeno. Ovo prihvaća niz koji predstavlja klasu objekta.

Koristimo sintaksu 'appname.objecttype' da odredimo argument 'class'.

  1. Naziv aplikacije: Moramo navesti ime aplikacije, koje će pružiti objekt.
  2. Vrsta objekta: Određujemo vrstu klase objekta koji ćemo stvoriti.

Primjer funkcije Excel VBA GETOBJECT

Pretpostavimo da imamo word dokument koji sadrži 3 tablice.

Želimo napisati VBA kôd koji će uvesti sve tablice u dokumentu na excel list. Da bismo učinili isto, trebat ćemo koristiti funkcije CreateObject i GetObject u VBA-u.

Koraci bi bili:

  • Stvorite excel datoteku i spremite datoteku s ekstenzijom .xlsm excel (Excel Macro-Enabled Workbook) jer ćemo trebati pokrenuti VBA kôd (makronaredbu).
  • Otvorite osnovni vizualni uređivač pomoću tipke prečaca (Alt + F11) ili pomoću naredbe 'Visual Basic' u grupi 'Code' na kartici 'Developer' u Excelu.
  • Dvaput kliknite na 'ThisWorkbook' s lijeve strane VBA uređivača i odaberite 'Workbook' s popisa koji se nakon toga prikazuje na vrhu zaslona.
  • S popisa odaberite "Otvori".
  • Sada moramo napisati kod između ova dva retka.
  • Prvo ćemo proglasiti varijable u kojima se nalaze objekti (MS Word Document i objekt MS Word Application) i 'String Variable' koja će sadržavati ime dokumenta odakle trebamo izvući tablice.
  • Za rukovanje pogreškama dodati ćemo jednu izjavu. Ova izjava govori programu VBA da ignorira pogrešku i nastavi izvršavanje sa sljedećim retkom koda. Izjava "Na sljedećem nastavku greške" ne popravlja pogreške u izvođenju, ali jednostavno znači da će se izvršavanje programa nastaviti iz retka koji slijedi redak koji je uzrokovao pogrešku.
  • Sada ćemo koristiti funkciju GetObject da bismo dobili pristup trenutnoj instanci objekta Word Application.
  • Ako u slučaju da trenutačno ne postoji instanca aplikacije MS Word ili komponenta ActiveX ne može stvoriti objekt ili vratiti referencu na ovaj objekt, tada će se pojaviti pogreška 429. Za to ćemo dodati ispod dva retka u kod. Nakon obrade pogreške, moramo stvoriti instancu objekta MS Word Application pomoću funkcije CreateObject .
  • Da bi aplikacija MS Word postala vidljiva, promijenit ćemo vidljivo svojstvo objekta 'WdApp' u TRUE .
  • Moramo naći mjesto i naziv datoteke u Word dokument iz kojeg želimo uvesti tablice u Excel list i dodijeliti isti na „strDocName” pronaći naziv i lokaciju, a možemo provjeriti svojstva od datoteka.

Da biste otvorili dijaloški okvir "Svojstva" , samo odaberite datoteku i pritisnite "Alt + Enter".

  • Ako datoteka ne postoji na navedenom mjestu, tada kôd vraća poruku koja glasi: "Pojedinosti o oznaci datoteke nisu pronađene na putu mape." Naslov bi bio "Žao nam je, taj naziv dokumenta ne postoji."
  • Sada moramo aktivirati MS Word aplikaciju i dodijeliti varijablu 'wddoc' s dokumentom riječi koji ima ime datoteke pohranjeno u 'strDocName.'
  • Ako datoteka već nije otvorena, trebamo otvoriti dokument i aktivirati aplikaciju.
  • Nakon aktiviranja word dokumenta, moramo pristupiti tablicama u dokumentu. Da bismo učinili isto, stvorit ćemo neke varijable.

Tble je cjelobrojna varijabla koja će pohraniti broj tablica u dokumentu.

rowWd je dugačka varijabla koja će pohraniti broj redaka u određenoj tablici.

colWd je dugačka varijabla koja će pohraniti broj stupaca u određenoj tablici.

  • Moramo izbrojati broj tablica u dokumentu, a ako je u dokumentu nešto značajno, tada ćemo korisniku prikazati okvir s porukom "Nema tablica u Word dokumentu."
  • Da bismo pristupili tablicama u dokumentu i zapisali sadržaj u excel listu, nekoliko puta ćemo pokretati V For petlju, a unutar ove VBA petlje pokretat ćemo ugniježđene petlje for za pristup svakom retku i svaki stupac u redu.
  • Kako ne želimo spremiti dokument i napustiti aplikaciju. Također bismo trebali osloboditi memoriju sustava. Da bismo učinili isto, napisat ćemo sljedeći kod.

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

Stvari koje treba zapamtiti

  1. Postoji neki pojedinačni objekt, za koji se generira samo jedan primjerak objekta, bez obzira na broj za koji se pokreće CreateObject. Funkcija GetObject u svakom trenutku vraća istu instancu kada se poziva s nizom nulte duljine i dolazi do pogreške ako se ne spominje argument 'pathname'.
  2. Ne možemo koristiti GetObject za pristup referenci na klasu stvorenu pomoću VBA.
  3. Ako u slučaju da ne postoji aktivna instanca aplikacije MS Word ili ne želimo da je objekt pokrenut s datotekom koja je već učitana, tada prvo koristimo funkciju CreateObject za stvaranje objekta, a zatim pomoću funkcije GetObject za pristup objektu .

Zanimljivi članci...