VBA „GetObject“ Kaip naudoti „GetObject“ funkciją „Excel VBA“?

„Excel VBA GETOBJECT“ funkcija

Mes galime naudoti „GetObject“ funkciją VBA „MS Excel“, kad galėtume pasiekti „ActiveX“ objektą iš „Excel“ failo ir paskui priskirti objektą objekto kintamajam. Norėdami naudoti OLE (objektų susiejimas ir įdėjimas) arba COM (sudėtinis objektų modulis) technologijas valdyti bet kurią „Microsoft“ programą, pvz., „MS Word“, „MS Outlook“, „MS PowerPoint“, „Internet Explorer“ ir kt., Galime naudoti funkciją VBA GETOBJECT.

Objektui sukurti naudojame funkciją CreateObject, o funkcija GETOBJECT grąžina nuorodą į objektą.

Funkcijos GETOBJECT sintaksė

Funkcijoje GET OBJECT yra šie įvardyti argumentai:

  1. Kelio pavadinimas: turime nurodyti visą failo, kuriame yra objektas, kurį norite gauti, kelią ir pavadinimą. Tai yra neprivalomas argumentas, iš tikrųjų abu „GetObject“ funkcijos argumentai yra neprivalomi, tačiau jei „kelio pavadinimas“ praleidžiamas, būtinas antrasis argumentas „klasė“.
  2. Klasė : Tai taip pat neprivalomas argumentas, kaip nurodyta anksčiau. Tai priima eilutę, nurodančią objekto klasę.

Norėdami nurodyti argumentą „klasė“, naudojame sintaksę „appname.objecttype“.

  1. Programos pavadinimas: Turime nurodyti programos pavadinimą, kuris pateiks objektą.
  2. Objekto tipas: Nurodome kuriamo objekto klasės tipą.

„Excel VBA GETOBJECT“ funkcijos pavyzdys

Tarkime, kad turime žodinį dokumentą, kuriame yra 3 lentelės.

Norime parašyti VBA kodą, kuris visas dokumento lenteles importuos į „Excel“ lapą. Norėdami tai padaryti, mums reikės naudoti VBA „CreateObject“ ir „GetObject“ funkcijas.

Žingsniai būtų:

  • Sukurkite „Excel“ failą ir išsaugokite failą su .xlsm excel plėtiniu („Excel Macro-Enabled Workbook“), nes mums reikės paleisti VBA kodą (makrokomandą).
  • Atidarykite pagrindinį vaizdo redaktorių naudodami spartųjį klavišą (Alt + F11) arba naudodami „Excel“ skirtuko „Kūrėjas“ grupės „Kodas“ komandą „Visual Basic“.
  • Dukart spustelėkite „ThisWorkbook“ kairėje VBA redaktoriaus pusėje ir ekrano viršuje pateiktame sąraše pasirinkite „Workbook“.
  • Iš sąrašo pasirinkite „Atidaryti“.
  • Dabar turime parašyti kodą tarp šių dviejų eilučių.
  • Pirma, mes paskelbsime kintamuosius objektams laikyti („MS Word“ dokumentas ir „MS Word Application“ objektas) ir „Styginių kintamąjį“, kad laikytume dokumento pavadinimą, iš kur turime išgauti lenteles.
  • Norėdami tvarkyti klaidas, pridėsime vieną teiginį. Šis teiginys liepia VBA programai nepaisyti klaidos ir atnaujinti vykdymą kitoje kodo eilutėje. „On Error Resume Next“ teiginys nepašalina vykdymo laiko klaidų, bet tai tiesiog reiškia, kad programos vykdymas bus tęsiamas nuo eilutės, einančios po eilutės, kuri sukėlė klaidą.
  • Dabar naudosime funkciją „GetObject“, kad gautume prieigą prie dabartinio „Word Application Object“ egzemplioriaus.
  • Jei tuo metu nėra „MS Word Application“ egzemplioriaus, arba „ActiveX“ komponentas negali sukurti objekto ar grąžinti nuorodos į šį objektą, tada klaida 429. Tam mes pridėsime žemiau dvi eilutes kode. Ištaisę klaidą, naudodami „ CreateObject“ funkciją , turime sukurti „MS Word Application“ objekto egzempliorių .
  • Kad „MS Word Application“ būtų matoma, mes pakeisime matomą „WdApp“ objekto ypatybę į TRUE .
  • Mums reikia rasti vietą ir failo pavadinimą Word dokumentą, iš kurio mes norime importuoti lenteles į Excel lape ir priskirti tas pats su "strDocName" Norėdami rasti pavadinimą ir vietą, ir mes galime patikrinti savybes iš failą.

Norėdami atidaryti dialogo langą „Ypatybės“ , tiesiog pasirinkite failą ir paspauskite „Alt + Enter“.

  • Jei failas neegzistuoja nurodytoje vietoje, tada kodas pateikia pranešimą, kuriame nurodoma: „Failo žymos informacija nerasta aplanko kelyje“. Pavadinimas būtų „Deja, to dokumento pavadinimo nėra“.
  • Dabar turime suaktyvinti „MS Word“ programą ir priskirti kintamąjį „wddoc“ su žodiniu dokumentu, kurio failo pavadinimas saugomas „strDocName“.
  • Jei failas dar neatidarytas, turime atidaryti dokumentą ir suaktyvinti programą.
  • Suaktyvinę žodį dokumentas, turime pasiekti dokumento lenteles. Norėdami tai padaryti, sukursime keletą kintamųjų.

Lentelė yra sveikasis skaičius kintamasis, kuris išsaugos lentelių skaičių dokumente.

rowWd is the long variable, which will store the number of rows in a particular table.

colWd is the long variable, which will store the number of columns in a particular table.

  • We need to count the number of tables in the document, and if there is notable in the document, then we will display a message box to the user that “No Tables found in the Word document.”
  • To access tables in the document and to write the content in the excel sheet, we will run a ‘For’ VBA loop for a number of tables times, and within this VBA loop, we will run nested ‘for’ loops for accessing every row and every column in the row.
  • As we do not want to save the document and quit the application. We should also release the memory of the system. To do the same, we will write the following code.

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

Ką reikia atsiminti

  1. Yra koks nors vieno egzemplioriaus objektas, kuriam sukuriamas tik vienas objekto egzempliorius, neatsižvelgiant į skaičių, kuriam paleista „CreateObject“. Funkcija „GetObject“ visada grąžina tą patį egzempliorių, kai jis iškviečiamas su nulio ilgio eilute, ir atsiranda klaida, jei neminima argumento „kelio pavadinimas“.
  2. Negalime naudoti „GetObject“ norėdami pasiekti nuorodą į klasę, sukurtą naudojant VBA.
  3. Jei tokiu atveju nėra aktyvaus „MS Word“ programos egzemplioriaus arba mes nenorime, kad objektas būtų inicijuotas jau įkeltu failu, tada pirmiausia naudome funkciją „CreateObject“, kad sukurtume objektą, o tada naudodamiesi funkcija „GetObject“ norėdami pasiekti objektą .

Įdomios straipsniai...