VBA GetObject - Kako uporabljati funkcijo GetObject v Excelu VBA?

Funkcija Excel VBA GETOBJECT

Funkcijo GetObject v VBA v MS Excelu lahko uporabimo za dostop do predmeta ActiveX iz datoteke excel in nato objekt dodelimo spremenljivki predmeta. Za uporabo OLE (Object Linking and Embedding) ali COM (Compound Object Module) tehnologije za nadzor katere koli Microsoftove aplikacije, kot so MS Word, MS Outlook, MS PowerPoint in Internet Explorer itd., Lahko uporabimo funkcijo VBA GETOBJECT.

Za ustvarjanje predmeta uporabljamo funkcijo CreateObject, funkcija GETOBJECT pa vrne referenco na objekt.

Sintaksa za funkcijo GETOBJECT

Funkcija GET OBJECT ima te imenovane argumente:

  1. Ime poti: Navesti moramo celotno pot in ime datoteke, ki vsebuje predmet, ki ga je treba pridobiti. To je neobvezen argument, pravzaprav sta oba argumenta v funkciji GetObject neobvezna, če pa je 'pathname' izpuščen, je potreben drugi argument 'class'.
  2. Razred : To je tudi neobvezen argument, kot je bilo prej navedeno. Ta sprejme niz, ki predstavlja razred predmeta.

Za določitev argumenta 'class' uporabljamo sintakso 'appname.objecttype'.

  1. Ime aplikacije: Navesti moramo ime aplikacije, ki bo zagotovilo objekt.
  2. Vrsta predmeta: Določimo vrsto razreda predmeta, ki ga želimo ustvariti.

Primer funkcije Excel VBA GETOBJECT

Recimo, da imamo besedni dokument, ki vsebuje 3 tabele.

Napisati želimo kodo VBA, ki bo vse tabele v dokumentu uvozila na list excel. Če želite storiti enako, bomo morali uporabiti funkciji CreateObject in GetObject v VBA.

Koraki bi bili:

  • Ustvarite datoteko excel in jo shranite s pripono .xlsm excel (Excel Macro-Enabled Workbook), saj bomo morali zagnati kodo VBA (makro).
  • Osnovni vizualni urejevalnik odprite s bližnjico (Alt + F11) ali z ukazom »Visual Basic« v skupini »Koda« na zavihku »Razvijalec« v Excelu.
  • Dvokliknite "ThisWorkbook" na levi strani urejevalnika VBA in na seznamu, prikazanem na vrhu zaslona, ​​izberite "Workbook".
  • Na seznamu izberite 'Odpri'.
  • Zdaj moramo med dve vrstici napisati kodo.
  • Najprej bomo razglasili spremenljivke za shranjevanje predmetov (MS Word Document in MS Word Application object) in 'String Variable' za ime dokumenta, od koder moramo izvleči tabele.
  • Za obravnavo napak bomo dodali en stavek. Ta izjava programu VBA sporoča, naj napako prezre in nadaljuje izvajanje z naslednjo vrstico kode. Stavek »Ob nadaljevanju napake naprej« ne odpravi napak pri izvajanju, ampak preprosto pomeni, da se bo izvajanje programa nadaljevalo iz vrstice, ki sledi vrstici, ki je povzročila napako.
  • Zdaj bomo s funkcijo GetObject dobili dostop do trenutnega primerka predmeta Wordova aplikacija.
  • Če trenutno ni primerka aplikacije MS Word ali komponenta ActiveX ne more ustvariti predmeta ali vrniti sklica na ta objekt, potem je napaka 429. Za to bomo v kodo dodali dve vrstici. Po obdelavi napake moramo s funkcijo CreateObject ustvariti primerek predmeta MS Word Application .
  • Če želimo, da bo aplikacija MS Word vidna, bomo spremenili vidno lastnost predmeta 'WdApp' v TRUE .
  • Moramo najti lokacijo in ime datoteke dokumenta besede, iz katere želimo uvoziti tabele v excel stanja in dodeliti enako na "strDocName" Da bi našli ime in lokacijo, mi pa lahko preverite lastnosti od mapa.

Če želite odpreti pogovorno okno »Lastnosti« , samo izberite datoteko in pritisnite »Alt + Enter«.

  • Če datoteka ne obstaja na določenem mestu, potem koda vrne sporočilo z napisom: »Datoteke Marks Details ni bilo mogoče najti na poti mape.« Naslov bi bil "Oprostite, to ime dokumenta ne obstaja."
  • Zdaj moramo aktivirati aplikacijo MS Word in spremenljivki 'wddoc' dodeliti besedilni dokument, ki ima ime datoteke, shranjeno v 'strDocName'.
  • Če datoteka še ni odprta, moramo odpreti dokument in aktivirati aplikacijo.
  • Po aktiviranju besedilnega dokumenta moramo dostopati do tabel v dokumentu. Da bomo storili enako, bomo ustvarili nekaj spremenljivk.

Tble je celoštevilčna spremenljivka, ki bo shranila število tabel v dokumentu.

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

Stvari, ki si jih je treba zapomniti

  1. Obstaja en objekt z enim primerkom, za katerega je ustvarjen samo en primerek predmeta, ne glede na število, za katerega se izvaja CreateObject. Funkcija GetObject ves čas vrne isti primerek, ko je poklican z nizom ničelne dolžine, in napaka pride, če argument "ime-poti" ni omenjen.
  2. GetObject ne moremo uporabljati za dostop do sklica na razred, ustvarjen z VBA.
  3. Če v primeru, da ni aktivnega primerka aplikacije MS Word ali ne želimo, da se objekt začne z datoteko, ki je že naložena, najprej uporabimo funkcijo CreateObject za ustvarjanje predmeta in nato s funkcijo GetObject za dostop do predmeta .

Zanimive Članki...