VBA GetObject | Kuidas kasutada funktsiooni GetObject Exceli VBA-s?
Funktsioon Exceli VBA GETOBJECT
Saame kasutada MS Excel Exceli VBA-s funktsiooni GetObject, et pääseda Exceli failist ActiveX-objektile juurde ja määrata objekt seejärel objekti muutujale. OLE (Object Linking and Embedding) või COM (Compound Object Module) tehnoloogia kasutamiseks mis tahes Microsofti rakenduse, näiteks MS Wordi, MS Outlooki, MS PowerPointi ja Internet Exploreri jms juhtimiseks saame kasutada funktsiooni VBA GETOBJECT.
Objekti loomiseks kasutame funktsiooni CreateObject ja funktsioon GETOBJECT tagastab viite objektile.
Funktsiooni GETOBJECT süntaks
Funktsioonil GET OBJECT on järgmised nimelised argumendid:
- Pathname: peame määrama allalaaditavat objekti sisaldava faili täieliku tee ja nime. See on valikuline argument, tegelikult on mõlemad GetObject-funktsiooni argumendid valikulised, kuid kui 'pathname' välja jätta, on vajalik teine argument 'class'.
- Klass : see on ka valikuline argument, nagu ka varem määratletud. See aktsepteerib stringi, mis tähistab objekti klassi.
Argumendi „klass” määramiseks kasutame süntaksit „appname.objecttype”.
- Rakenduse nimi : peame määrama rakenduse nime, mis annab objekti.
- Objecttype: määrame loodava objekti klassi tüübi.
Funktsiooni Exceli VBA GETOBJECT näide
Selle VBA GetObjecti malli saate alla laadida siit - VBA GetObjecti mallOletame, et meil on sõnadokument, mis sisaldab 3 tabelit.
Soovime kirjutada VBA-koodi, mis impordib kõik dokumendis olevad tabelid Exceli lehele. Selleks peame VBA-s kasutama funktsioone CreateObject ja GetObject.
Sammud oleksid:
- Looge Exceli fail ja salvestage fail laiendiga .xlsm excel (Exceli makrotoega töövihik), kuna peame käivitama VBA-koodi (makro).
- Avage visuaalne põhiredaktor otseteeklahviga (Alt + F11) või Exceli vahekaardi Arendaja rühmas Kood käsuga 'Visual Basic'.
- Topeltklõpsake VBA-redaktori vasakul küljel 'ThisWorkbook' ja valige ekraani ülaservas olevast loendist 'Workbook'.
- Valige loendist 'Ava'.
- Nüüd peame kirjutama koodi nende kahe rea vahele.
- Esiteks deklareerime muutujaid objektide hoidmiseks (MS Wordi dokument ja MS Wordi rakenduse objekt) ja "String Muutuja", et hoida dokumendi nime, kust peame tabelid välja pakkima.
- Veakäsitluse jaoks lisame ühe lause, see lause käsib VBA-programmis viga ignoreerida ja jätkata järgmise koodireaga. Lause „On Error Resume Next” ei paranda käituse tõrkeid, vaid tähendab lihtsalt seda, et programmi täitmine jätkub reast, mis järgneb vea põhjustanud reale.
- Nüüd kasutame funktsiooni GetObject, et pääseda juurde Wordi rakenduse objekti praegusele eksemplarile.
- Kui sel juhul pole MS Wordi rakenduse praegust eksemplari või ActiveX-komponent ei saa objekti luua ega sellele objektile viidet anda, siis tõrge 429. Selle jaoks lisame koodi alla kaks rida. Pärast tõrke käsitlemist peame funktsiooni CreateObject abil looma MS Wordi rakenduse objekti eksemplari .
- MS Wordi rakenduse nähtavaks muutmiseks muudame objekti 'WdApp' nähtava omaduse väärtuseks TÕENE .
- Peame leidma sõnadokumendi asukoha ja failinime, millest tahame tabelid Exceli lehele importida, ja määrama sama failile “strDocName” . Nime ja asukoha leidmiseks saame kontrollida faili omadusi .
Avada "Omadused" dialoogiboks, valige fail ja vajutage "Alt + Enter" .
- Kui faili määratud asukohas ei eksisteeri, tagastab kood teate "Faili märgistusandmeid ei leitud kausta teelt". Pealkiri oleks "Vabandust, seda dokumendi nime pole olemas".
- Nüüd peame aktiveerima MS Wordi rakenduse ja määrama muutuja 'wddoc' sõnadokumendiga, mille failinimi on salvestatud 'strDocName' .
- Kui fail pole juba avatud, peame dokumendi avama ja rakenduse aktiveerima.
- Pärast sõna dokumendi aktiveerimist peame pääsema juurde dokumendi tabelitele. Samamoodi loome mõned muutujad.
Table on täisarvumuutuja, mis salvestab dokumentide tabelite arvu.
rowWd on pikk muutuja, mis salvestab ridade arvu konkreetses tabelis.
colWd on pikk muutuja, mis salvestab konkreetse tabeli veergude arvu.
- Peame loendama dokumendis olevate tabelite arvu ja kui dokumendis pole ühtegi tabelit, kuvame kasutajale sõnumikasti, et „Wordi dokumendis pole tabeleid leitud” .
- Dokumendis olevate tabelite juurde pääsemiseks ja sisu kirjutamiseks Exceli lehele käivitame mitu tabelit mitu korda VBA-tsüklit ja selles VBA-tsüklis käivitame sisestatud 'for' silmuseid, et pääseda juurde igale reale ja iga rea veerg.
- Kuna me ei soovi dokumenti salvestada ja rakendust sulgeda. Peaksime vabastama ka süsteemi mälu. Samamoodi kirjutame järgmise koodi.
Nüüd, kui avame Exceli faili, värskendatakse täidet sõna dokumendi tabeli sisuga.
Kood:
Private Sub Workbook_Open () Rem Objekti muutujate deklareerimine, et pääseda juurde GETOBJECTi loodud objektile Dim WdApp objektina, wddoc Object Rem Stringimuutuja deklareerimine Wordi dokumendile juurdepääsuks Dim strDocName String Rem Vea käsitsemine Vea korral Taasta järgmine Rem MS Wordi aktiveerimine, kui see on juba avatud Määra WdApp = GetObject (, "Word.Application") Kui Err.Number = 429 Siis Err.Clear Rem Wordi rakendusobjekti loomine, kui MS Word pole veel avatud Set WdApp = CreateObject ("Word.Application") End Kui WdApp.Visible = True strDocName = "C: \ Users \ CBA7_01 \ Desktop \ Marks Details.docx" Rem Asjakohase dokumendi asjakohase kataloogi kontrollimine Rem Kui seda ei leita, teavitage sellest kasutajat ja sulgege programm If Dir (strDocName) = " "Siis MsgBox" Fail "& strDocName & vbCrLf &"ei leitud kausta teest "& vbCrLf &" C: \ Users \ CBA7_01 \. ", _vbExclamation," Vabandust, seda dokumendi nime pole olemas. "Exit Sub End, kui WdApp.Activate Set wddoc = WdApp.Documents (strDocName ) Kui wddoc pole midagi, siis määrake wddoc = WdApp.Documents.Open ("C: \ Users \ CBA7_01 \ Desktop \ Marks Details.docx") wddoc.Aktiveerige Rem Definition muutujad, et pääseda tabelitele sõnas Dokumendi Dim Tble As Integer Dim rowWd nii pikk hämarus colWd kui täisarv x x nii pikk, y nii pikk, y nii pikk x = 1 y = 1 koos wddoc Tble = wddoc.Tables.Count Kui Tble = 0, siis MsgBox "Wordi dokumendis pole tabeleid leitud", vbExclamation, "Ei Imporditavad tabelid "Exit Sub End If Rem Alustades silmusprotsessi tabelitele ja nende ridadele juurdepääsemiseks, veerud i = 1 jaoks. Tabelid. Tabelid (i) ReaWd = 1 kuni .Read.Count jaoks colWd = 1 kuni .Veerud.Lahtrite loendamine (x, y) = WorksheetFunction.Clean (.cell (rowWd, colWd) .Range.Text) Rem Juurdepääs järgmisele veerule y = y + 1 Next colWd Rem Järgmisele reale minek ja alustamine veerust 1 y = 1 x = x + 1 Järgmine ridaWd lõpeb järgmise otsaga Remiga, meil pole vaja Wordi dokumenti wddoc salvestada. Sule salvestusvahetused: = False Rem lõpetasime MS Wordi rakenduse WdApp.Quit Rem Lõpuks vabastame 2 objekti muutujale eraldatud süsteemimälu Set wddoc = Midagi pole määratud WdApp = Midagi lõppu alamLõpeta Rem Vabastame lõpuks süsteemimälu, mis on eraldatud kahele objektimuutujale. Set wddoc = Nothing Set WdApp = Nothing End SubLõpeta Rem Vabastame lõpuks süsteemimälu, mis on eraldatud kahele objektimuutujale. Set wddoc = Nothing Set WdApp = Nothing End Sub
Asjad, mida meeles pidada
- On mõni üksikobjekt, mille jaoks genereeritakse ainult üks objekti eksemplar, olenemata sellest, millise arvuga CreateObjecti käitatakse. Funktsioon GetObject tagastab kogu aeg sama eksemplari, kui seda kutsutakse nullpikkusega stringiga, ja tõrke ilmneb, kui argumenti "pathname" pole mainitud.
- Me ei saa kasutada GetObjecti VBA-ga loodud klassi viite juurde pääsemiseks.
- Kui sel juhul pole MS Wordi rakenduse aktiivset eksemplari või me ei soovi, et objekt oleks algatatud juba laaditud failiga, kasutame esmalt objekti loomiseks funktsiooni CreateObject ja seejärel objektile juurdepääsemiseks funktsiooni GetObject.