VBA GetObject | Kuinka käyttää GetObject-toimintoa Excel VBA: ssa?

Excel VBA GETOBJECT -toiminto

Voimme käyttää MS Excelin VBA: n GetObject-funktiota pääsemään ActiveX-objektiin Excel-tiedostosta ja osoittamaan objektin sitten objektimuuttujaan. VBA GETOBJECT -toimintoa voidaan käyttää OLE (Object Linking and Embedding) - tai COM (Compound Object Module) -tekniikan avulla minkä tahansa Microsoft-sovelluksen, kuten MS Word, MS Outlook, MS PowerPoint ja Internet Explorer, hallintaan.

Käytämme CreateObject-funktiota objektin luomiseen ja GETOBJECT-funktio palauttaa viitteen objektille.

Syntaksi GETOBJECT-toiminnolle

GET OBJECT -funktiolla on seuraavat nimetyt argumentit:

  1. Polun nimi : Meidän on määritettävä noudettavan objektin sisältävän tiedoston koko polku ja nimi. Tämä on valinnainen argumentti, itse asiassa molemmat GetObject-funktion argumentit ovat valinnaisia, mutta jos 'polun nimi' jätetään pois, toinen argumentti 'luokka' vaaditaan.
  2. Luokka : Tämä on myös valinnainen argumentti, kuten aiemmin on määritelty. Tämä hyväksyy merkkijonon, joka edustaa objektin luokkaa.

Käytämme syntaksia 'appname.objecttype' määrittelemään 'class' -argumentin.

  1. Sovelluksen nimi: Meidän on määritettävä sovelluksen nimi, joka antaa objektin.
  2. Objecttype: Määritämme luotavan objektiluokan tyypin.

Esimerkki Excel VBA GETOBJECT -toiminnosta

Voit ladata tämän VBA GetObject -mallin täältä - VBA GetObject -malli

Oletetaan, että meillä on Word-asiakirja, joka sisältää 3 taulukkoa.

Haluamme kirjoittaa VBA-koodin, joka tuo kaikki asiakirjan taulukot Excel-taululle. Samoin meidän on käytettävä VBA: ssa CreateObject- ja GetObject-toimintoja.

Vaiheet olisivat:

  • Luo Excel-tiedosto ja tallenna tiedosto .xlsm excel -laajennuksella (Excel Macro-Enabled Workbook), koska meidän on suoritettava VBA-koodi (makro).
  • Avaa Visual Basic -editori pikanäppäimellä (Alt + F11) tai käyttämällä Visual Basic -komentoa Excelin Kehittäjä-välilehden Koodi-ryhmässä.
  • Kaksoisnapsauta 'ThisWorkbook' VBA-editorin vasemmalla puolella ja valitse 'Työkirja' sen jälkeen näytön yläosassa olevasta luettelosta.

  • Valitse luettelosta 'Avaa'.

  • Nyt meidän on kirjoitettava koodi näiden kahden rivin väliin.

  • Ensin ilmoitetaan muuttujat, jotka pitävät objekteja (MS Word Document ja MS Word Application -objekti), ja 'String Variable', joka pitää sisällään asiakirjan nimen, josta meidän on purettava taulukot.

  • Virheenkäsittelyä varten lisätään yksi lause, tämä käsky käskee VBA-ohjelmaa ohittamaan virheen ja jatkamaan suoritusta seuraavalla koodirivillä. ”On Error Resume Next” -lauseke ei korjaa ajonaikaisia ​​virheitä, mutta se tarkoittaa yksinkertaisesti sitä, että ohjelman suorittaminen jatkuu virheen aiheuttaneen rivin mukaiselta riviltä.

  • Nyt käytämme GetObject-toimintoa pääsemään Word-sovellusobjektin nykyiseen ilmentymään.

  • Jos siinä tapauksessa ei ole olemassa olevaa MS Word -sovelluksen esiintymää tai ActiveX-komponentti ei voi luoda objektia tai palauttaa viitteitä tälle objektille, virhe 429. Tätä varten lisätään koodiin kaksi riviä. Virheen käsittelyn jälkeen meidän on luotava MS Word Application -objektin ilmentymä CreateObject-funktiolla .

  • Jotta MS Word -sovellus olisi näkyvissä, muutamme WdApp- objektin näkyvän ominaisuuden TOSI .

  • Meidän on löydettävä Word-asiakirjan sijainti ja tiedostonimi, josta haluamme tuoda taulukot Excel-taulukkoon, ja määrittää sama strDocName-nimelle . Nimen ja sijainnin löytämiseksi voimme tarkistaa tiedoston ominaisuudet .

Voit avata Ominaisuudet- valintaikkunan valitsemalla tiedoston ja painamalla Alt + Enter .

  • Jos tiedostoa ei ole määritetyssä paikassa, koodi palauttaa sanoman "Tiedoston merkintätiedot eivät löytyneet kansiopolusta". Otsikko olisi "Anteeksi, asiakirjaa ei ole olemassa".

  • Nyt meidän on aktivoitava MS Word -sovellus ja määritettävä muuttuja 'wddoc' ​​sanatiedostoon, jonka tiedostonimi on tallennettu strDocName- tiedostoon .

  • Jos tiedostoa ei ole jo avattu, meidän on avattava asiakirja ja aktivoitava sovellus.

  • Kun sana-asiakirja on aktivoitu, meidän on käytettävä asiakirjan taulukoita. Voit tehdä saman luomalla muuttujia.

Taulukko on kokonaislukumuuttuja, joka tallentaa taulukkojen määrän asiakirjaan.

rowWd on pitkä muuttuja, joka tallentaa rivien määrän tietyssä taulukossa.

colWd on pitkä muuttuja, joka tallentaa sarakkeiden määrän tietyssä taulukossa.

  • Meidän on laskettava taulukossa olevien taulukoiden lukumäärä ja jos asiakirjassa ei ole taulukkoa, näytämme käyttäjälle viestiruudun, jonka mukaan "Ei taulukoita löydy Word-asiakirjasta" .

  • Pääsetksesi asiakirjan taulukoihin ja kirjoittaaksesi sisällön excel-taulukkoon, suoritamme 'For' VBA -silmukan useita taulukoita kertaa ja tässä VBA-silmukassa suoritamme sisäkkäiset 'for' -silmukat jokaiselle riville pääsemiseksi ja rivin jokaisessa sarakkeessa.

  • Koska emme halua tallentaa asiakirjaa ja sulkea sovellusta. Meidän pitäisi myös vapauttaa järjestelmän muisti. Voit tehdä saman kirjoittamalla seuraavan koodin.

Aina kun avaamme Excel-tiedoston, täyttö päivitetään Word-asiakirjan taulukon sisältöön.

Koodi:

Yksityinen alityökirja_Avaa () Rem Ilmoitetaan objektimuuttujat GETOBJECTin luoman objektin käyttämiseksi Dim WdApp Object, wddoc Object Rem Ilmoitetaan merkkijonomuuttuja pääsemään Word-asiakirjaan Dim strDocName As String Rem Virheen käsittely Virhe Jatka Seuraava Rem Aktivoi MS Word, jos on jo avattu Aseta WdApp = GetObject (, "Word.Application") Jos Err.Number = 429 Sitten Err.Clear Rem Word-sovellusobjektin luominen, jos MS Word ei ole vielä auki Aseta WdApp = CreateObject ("Word.Application") Lopeta Jos WdApp.Visible = True strDocName = "C: \ Users \ CBA7_01 \ Desktop \ Marks Details.docx" Rem Tarkistetaan asiaankuuluvan asiakirjan asiaankuuluva hakemisto Rem Jos ei löydy, ilmoita asiasta käyttäjälle ja sulje ohjelma If Dir (strDocName) = " "Sitten MsgBox" Tiedosto "& strDocName & vbCrLf &"ei löytynyt kansiopolusta "& vbCrLf &" C: \ Users \ CBA7_01 \. ", _vbExclamation," Valitettavasti kyseistä asiakirjan nimeä ei ole. "Poistu alaosasta, jos WdApp.Activate Set wddoc = WdApp.Documents (strDocName ) Jos wddoc ei ole mitään, aseta wddoc = WdApp.Documents.Open ("C: \ Users \ CBA7_01 \ Desktop \ Marks Details.docx") wddoc.Activate Rem Määrittävät muuttujat päästäksesi taulukoihin sana-asiakirjassa Dim Tble As Integer Dim rowWd Niin pitkä himmeä colWd kuin kokonaisluku Dim x niin pitkä, y niin pitkä x = 1 y = 1 Kanssa wddoc Taulukko = wddoc.Tables.Count Jos taulukko = 0 Sitten MsgBox "Ei taulukoita löytynyt Word-asiakirjasta", vbExclamation, "Ei Taulukot, jotka tuodaan "Lopeta alipääte, jos Rem Aloitetaan silmukointiprosessi päästäksesi taulukoihin ja niiden riveihin, sarakkeet I = 1 taulukkoon .Taulukot (i) rivilläWd = 1 Vastaanottajariveille. ColWd = 1.Count Cells (x, y) = WorksheetFunction.Clean (.cell (rowWd, colWd) .Range.Text) Rem Seuraava sarake y = y + 1 Seuraava colWd Rem Siirry seuraavalle riville ja aloita sarakkeesta 1 y = 1 x = x + 1 Seuraava riviWd End With Next End With Rem ei tarvitse tallentaa sanaa wddoc. Close Savechanges: = False Rem lopetimme MS Word -sovelluksen WdApp.Quit Rem Vapautimme lopuksi järjestelmämuistin, joka oli varattu kahdelle objektimuuttujalle Set wddoc = Ei mitään asetettua WdApp = Ei mitään loppu -alaaLopeta Rem Vapautamme vihdoin järjestelmämuistin, joka on varattu kahdelle objektimuuttujalle Aseta wddoc = Ei mitään Aseta WdApp = Ei mitään loppuaLopeta Rem Vapautamme vihdoin järjestelmämuistin, joka on varattu kahdelle objektimuuttujalle Aseta wddoc = Ei mitään Aseta WdApp = Ei mitään loppua

Muistettavaa

  1. On joitain yhden instanssin objekteja, joille luodaan vain yksi objektin ilmentymä riippumatta siitä, mihin numeroon CreateObject suoritetaan. GetObject-funktio palauttaa aina saman esiintymän, kun sitä kutsutaan nollan pituisella merkkijonolla, ja virhe tulee, jos "polun nimi" -argumenttia ei mainita.
  2. Emme voi käyttää GetObject-ohjelmaa käyttääksesi viittausta luokkaan, joka on luotu VBA: lla.
  3. Jos siinä tapauksessa ei ole aktiivista MS Word -sovelluksen esiintymää tai emme halua, että objekti aloitetaan jo ladatulla tiedostolla, käytämme ensin CreateObject-toimintoa objektin luomiseen ja sitten GetObject-toiminnon käyttämiseen objektiin pääsemiseksi.

$config[zx-auto] not found$config[zx-overlay] not found