VBA GetObject - Kuidas Exceli VBA-s funktsiooni GetObject kasutada?

Lang L: none (table-of-contents)

Funktsioon Exceli VBA GETOBJECT

Saame kasutada MS 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:

  1. 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'.
  2. 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”.

  1. Rakenduse nimi : peame määrama rakenduse nime, mis annab objekti.
  2. Objekti tüüp: määrame loodava objekti klassi tüübi.

Funktsiooni Exceli VBA GETOBJECT näide

Oletame, et meil on sõnaline dokument, mis sisaldab 3 tabelit.

Tahame 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" dokumendi nime hoidmiseks, kust peame tabelid välja võtma.
  • Vigade käsitlemiseks lisame ühe avalduse. See lause käsib VBA-programmil viga ignoreerida ja jätkata käivitamist 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 MS Wordi rakenduse praegust eksemplari pole 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 looma funktsiooni CreateObject abil MS Wordi rakenduse objekti eksemplari .
  • MS Wordi rakenduse nähtavaks muutmiseks muudame objekti 'WdApp' nähtava omaduse väärtuseks TÕENE .
  • Me peame leidma asukoha ja faili nimi sõna dokumendi, millest soovime importida tabelid Exceli lehel ja anna sama aasta "strDocName" Et leida nimi ja asukoht, ja me saame kontrollida omadused on faili.

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 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

Asjad, mida meeles pidada

  1. 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õrge ilmneb, kui argumenti "pathname" ei mainita.
  2. Me ei saa kasutada GetObjecti VBA-ga loodud klassi viite juurde pääsemiseks.
  3. Kui sel juhul pole MS Wordi rakenduses aktiivset eksemplari või me ei soovi, et objekt oleks algatatud juba laaditud failiga, siis kasutame esmalt objekti loomiseks funktsiooni CreateObject ja seejärel objektile juurdepääsemiseks funktsiooni GetObject. .

Huvitavad Artiklid...