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 sen sitten objektimuuttujalle. 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 objektin viitteen.

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 määritettiin. 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. Objektityyppi: Määritämme luodun objektiluokan tyypin .

Esimerkki Excel VBA GETOBJECT -toiminnosta

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

Haluamme kirjoittaa VBA-koodin, joka tuo kaikki asiakirjan taulukot Excel-taululle. Jotta saisimme saman, meidän on käytettävä VBA: n 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 visuaalinen peruseditori pikanäppäimellä (Alt + F11) tai Excelin Kehittäjä-välilehden Koodi-ryhmän Visual Basic -komennolla.
  • 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 taulukot on purettava.
  • Virheenkäsittelyä varten lisätään yksi lause. Tämä lause 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 aiheuttanutta riviä seuraavalta riviltä.
  • Nyt käytämme GetObject-toimintoa pääsemään Word-sovellusobjektin nykyiseen ilmentymään.
  • Jos siinä tapauksessa, että MS Word -sovelluksessa ei ole nykyistä esiintymää, tai ActiveX-komponentti ei voi luoda objektia tai palauttaa viitteitä tälle objektille, niin 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 täytyy löytää sijainti ja tiedostonimi Word-asiakirjan, josta haluamme tuoda taulukoita excel ja antaa samaa kuin ”strDocName” Voit etsiä nimen ja sijainnin, ja voimme tarkistaa ominaisuuksia ja tiedosto.

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 taulukkojen määrä, ja jos asiakirjassa on merkittäviä taulukoita, näytämme käyttäjälle viestiruudun, jossa "Taulukoita ei löydy Word-dokumentista".
  • 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 jokaisen rivin käyttämiseen. ja rivin jokaisen sarakkeen.
  • 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.

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

Muistettavaa

  1. On joitain yhden esiintymän objekteja, joille luodaan vain yksi objektin esiintymä riippumatta siitä, mihin numeroon CreateObject suoritetaan. GetObject-funktio palauttaa aina saman esiintymän, kun sitä kutsutaan nollapitkällä merkkijonolla, ja virhe tulee, jos polun 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 objektia CreateObject-toiminnolla ja käytämme sitten GetObject-toimintoa objektin käyttämiseen. .

Mielenkiintoisia artikkeleita...