VBA GetObject - Ako používať funkciu GetObject v programe Excel VBA?

Funkcia Excel VBA GETOBJECT

Pomocou funkcie GetObject vo VBA v programe MS Excel môžeme získať prístup k objektu ActiveX zo súboru programu Excel a potom objekt priradiť k premennej objektu. Na použitie technológie OLE (Object Linking and Embedding) alebo COM (Compound Object Module) na ovládanie ľubovoľných aplikácií spoločnosti Microsoft, ako sú MS Word, MS Outlook, MS PowerPoint a Internet Explorer, atď., Môžeme použiť funkciu VBA GETOBJECT.

Na vytvorenie objektu používame funkciu CreateObject a funkcia GETOBJECT vráti odkaz na objekt.

Syntax pre funkciu GETOBJECT

Funkcia GET OBJECT má tieto pomenované argumenty:

  1. Cesta: Musíme zadať úplnú cestu a názov súboru obsahujúceho objekt, ktorý sa má načítať. Toto je voliteľný argument, v skutočnosti sú oba argumenty vo funkcii GetObject voliteľné, ale ak je vynechaný údaj „cesta“, je potrebný druhý argument „trieda“.
  2. Trieda : Toto je tiež voliteľný argument, ako je uvedené vyššie tiež. Prijíma reťazec predstavujúci triedu objektu.

Na určenie argumentu „trieda“ používame syntax „appname.objecttype“.

  1. Názov aplikácie: Musíme určiť názov aplikácie, ktorá objekt poskytne.
  2. Typ objektu: Zadáme typ triedy objektu, ktorý sa má vytvoriť.

Príklad funkcie Excel VBA GETOBJECT

Predpokladajme, že máme slovný dokument obsahujúci 3 tabuľky.

Chceme napísať kód VBA, ktorý importuje všetky tabuľky v dokumente do hárka programu Excel. Ak to chcete urobiť, budeme musieť vo VBA použiť funkciu CreateObject a GetObject.

Kroky by boli:

  • Vytvorte súbor programu Excel a uložte ho s príponou .xlsm Excel (pracovný zošit programu Excel s makrom), pretože budeme musieť spustiť kód VBA (makro).
  • Otvorte základný vizuálny editor pomocou klávesovej skratky (Alt + F11) alebo pomocou príkazu „Visual Basic“ v skupine „Code“ na karte „Developer“ v programe Excel.
  • Dvakrát kliknite na „ThisWorkbook“ na ľavej strane editora VBA a vyberte „Workbook“ zo zoznamu, ktorý sa zobrazí ďalej v hornej časti obrazovky.
  • V zozname vyberte možnosť Otvoriť.
  • Teraz musíme napísať kód medzi tieto dva riadky.
  • Najskôr deklarujeme premenné, ktoré budú obsahovať objekty (dokument MS Word a objekt aplikácie MS Word) a „reťazcovú premennú“, ktorá bude obsahovať názov dokumentu, z ktorého potrebujeme tabuľky extrahovať.
  • Pre spracovanie chýb pridáme jedno vyhlásenie. Toto vyhlásenie hovorí programu VBA, aby ignoroval chybu a obnovil vykonávanie s ďalším riadkom kódu. Príkaz „On Error Resume Next“ neopravuje chyby za behu, ale jednoducho znamená, že vykonávanie programu bude pokračovať od riadku nasledujúceho po riadku, ktorý chybu spôsobil.
  • Teraz použijeme funkciu GetObject na získanie prístupu k aktuálnej inštancii objektu aplikácie Word.
  • Ak v prípade, že neexistuje aktuálna inštancia aplikácie MS Word, alebo komponent ActiveX nemôže vytvoriť objekt alebo vrátiť odkaz na tento objekt, zobrazí sa chyba 429. Za týmto účelom v kóde pridáme dva riadky. Po spracovaní chyby musíme vytvoriť inštanciu objektu aplikácie MS Word pomocou funkcie CreateObject .
  • Aby sme zviditeľnili aplikáciu MS Word, zmeníme viditeľnú vlastnosť objektu 'WdApp' na TRUE .
  • Musíme nájsť umiestnenie a názov súboru dokumentu programu Word, z ktorého chceme importovať tabuľky do hárka programu Excel, a priradiť ich rovnakému parametru „strDocName“. Názov a umiestnenie môžeme vyhľadať a môžeme skontrolovať vlastnosti súboru. spis.

Ak chcete otvoriť dialógové okno „Vlastnosti“ , jednoducho vyberte súbor a stlačte kombináciu klávesov „Alt + Enter“.

  • Ak súbor v zadanom umiestnení neexistuje, vráti kód správu so správou „Podrobnosti o značkách súboru sa nenašli v ceste k priečinku.“ Názov by bol „Ľutujeme, tento názov dokumentu neexistuje.“
  • Teraz musíme aktivovať aplikáciu MS Word a priradiť premennej 'wddoc' k slovnému dokumentu, ktorý má názov súboru uložený v 'strDocName.'
  • Ak súbor ešte nie je otvorený, musíme otvoriť dokument a aktivovať aplikáciu.
  • Po aktivácii slova dokument sa musíme dostať k tabuľkám v dokumente. Aby sme to isté urobili, vytvoríme niekoľko premenných.

Tble je celočíselná premenná, ktorá uloží počet tabuliek v dokumente.

rowWd je dlhá premenná, ktorá uloží počet riadkov v konkrétnej tabuľke.

colWd je dlhá premenná, ktorá uloží počet stĺpcov v konkrétnej tabuľke.

  • Musíme spočítať počet tabuliek v dokumente. Ak je to v dokumente pozoruhodné, zobrazíme používateľovi okno so správou „V dokumente Word sa nenašli žiadne tabuľky.“
  • Na prístup k tabuľkám v dokumente a na zapísanie obsahu do hárka programu Excel spustíme slučku VBA typu „For“ pre viackrát tabuliek a v rámci tejto slučky VBA spustíme vnorené slučky „for“ na prístup ku každému riadku a každý stĺpec v riadku.
  • Pretože nechceme uložiť dokument a ukončiť aplikáciu. Mali by sme tiež uvoľniť pamäť systému. Aby sme to isté urobili, napíšeme nasledujúci kód.

Teraz, kedykoľvek otvoríme súbor programu Excel, sa výplň aktualizuje o obsah tabuľky zo slova word.

Kód:

Private Sub Workbook_Open () Rem Deklarovanie premenných objektu na prístup k objektu vytvorenému GETOBJECT Dim WdApp ako objekt, wddoc ako objekt Rem Deklarovanie premennej reťazca na prístup k dokumentu Word Dim strDocName ako reťazec Rem Spracovanie chyby Pri chybe Pokračovať Ďalej Rem Aktivácia MS Word, ak je je už otvorený Nastaviť WdApp = GetObject (, "Word.Application") Ak Err.Number = 429 Potom Err.Clear Rem Vytvorenie objektu aplikácie Word, ak MS Word ešte nie je otvorený Nastaviť WdApp = CreateObject ("Word.Application") Koniec If WdApp.Visible = True strDocName = "C: Users CBA7_01 Desktop Marks Details.docx" Rem Kontrola príslušného adresára pre príslušný dokument Rem Ak sa nenájde, informovanie používateľa a ukončenie programu If Dir (strDocName) = " „Potom MsgBox„ Súbor “& strDocName & vbCrLf &“nebol nájdený v ceste k priečinku „& vbCrLf &“ C: Users CBA7_01 . ", _vbExclamation," Prepáčte, tento názov dokumentu neexistuje. "Ak je WdApp.Activate Set wddoc = WdApp.Documents (strDocName), existuje koniec. ) Ak wddoc nič nie je, nastavte wddoc = WdApp.Documents.Open ("C: Users CBA7_01 Desktop Marks Details.docx") wddoc.Activate Rem Definovanie premenných na prístup k tabuľkám v dokumente slova 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 "V dokumente Word sa nenašli žiadne tabuľky", vbExclamation, "Nie Tabuľky na import „Ukončiť Sub End If Rem Spustenie procesu vytvárania cyklov pre prístup k tabuľkám a ich riadkom, stĺpcom For i = 1 To Tble With.Tables (i) For rowWd = 1 To .Rows.Count For colWd = 1 To .Columns.Počet buniek (x, y) = WorksheetFunction.Clean (.cell (rowWd, colWd) .Range.Text) Rem Prístup k nasledujúcemu stĺpcu y = y + 1 Ďalší stĺpec Rem Prechod na ďalší riadok a začiatok od stĺpca 1 y = 1 x = x + 1 Ďalší riadok Wd Koniec s ďalším Koncom s Rem nemusíme ukladať wordový dokument wddoc.Close Savechanges: = False Rem sme ukončili aplikáciu MS Word WdApp.Quit Rem Konečne uvoľníme systémovú pamäť alokovanú pre 2 objektové premenné Sada wddoc = Nič nie je nastavené WdApp = Nič nie je zadanéQuit Rem Nakoniec uvoľníme systémovú pamäť alokovanú pre 2 objektové premenné Nastaviť wddoc = Nič Nastaviť WdApp = Nič Koniec SubQuit Rem Nakoniec uvoľníme systémovú pamäť alokovanú pre 2 objektové premenné Nastaviť wddoc = Nič Nastaviť WdApp = Nič Koniec Sub

Na čo treba pamätať

  1. Existuje nejaký jednoinštančný objekt, pre ktorý sa vygeneruje iba jedna inštancia objektu, bez ohľadu na počet, pre ktorý je spustený CreateObject. Funkcia GetObject vždy vráti tú istú inštanciu, keď je volaná s reťazcom nulovej dĺžky, a dôjde k chybe, ak nie je uvedený argument „cesta“.
  2. Nemôžeme použiť GetObject na prístup k odkazu na triedu vytvorenú pomocou VBA.
  3. Ak v prípade, že neexistuje aktívna inštancia aplikácie MS Word, alebo ak nechceme, aby bol objekt iniciovaný už načítaným súborom, potom na vytvorenie objektu najskôr použijeme funkciu CreateObject a potom na prístup k objektu použijeme funkciu GetObject. .

Zaujímavé články...