VBA GetObject - Hvordan bruges GetObject-funktion i Excel VBA?

Indholdsfortegnelse

Excel VBA GETOBJECT-funktion

Vi kan bruge GetObject-funktionen i VBA i MS Excel til at få adgang til et ActiveX-objekt fra excel-filen og derefter tildele objektet til en objektvariabel. For at bruge OLE (Object Linking and Embedding) eller COM (Compound Object Module) teknologi til at kontrollere enhver Microsoft-applikation som MS Word, MS Outlook, MS PowerPoint og Internet Explorer osv., Kan vi bruge VBA GETOBJECT-funktionen.

Vi bruger CreateObject-funktionen til at oprette objektet, og GETOBJECT-funktionen returnerer referencen til objektet.

Syntaks til GETOBJECT-funktion

GET OBJECT-funktionen har disse navngivne argumenter:

  1. Stinavn: Vi skal angive den fulde sti og navnet på den fil, der indeholder det objekt, der skal hentes. Dette er et valgfrit argument. Faktisk er begge argumenterne i GetObject-funktionen valgfri, men hvis 'stienavn' udelades, kræves det andet argument 'klasse'.
  2. Klasse : Dette er også et valgfrit argument som angivet tidligere også. Dette accepterer en streng, der repræsenterer objektets klasse.

Vi bruger syntaksen 'appname.objecttype' til at specificere 'klasse' argument.

  1. Appnavn: Vi skal specificere applikationsnavnet, som giver objektet.
  2. Objekttype: Vi specificerer typen af ​​objektklasse, der skal oprettes.

Eksempel på Excel VBA GETOBJECT-funktion

Antag, at vi har et orddokument, der indeholder 3 tabeller.

Vi ønsker at skrive en VBA-kode, der importerer alle tabellerne i dokumentet til excel-arket. For at gøre det samme skal vi bruge CreateObject og GetObject-funktionen i VBA.

Trin ville være:

  • Opret en excel-fil og gem filen med .xlsm excel-udvidelsen (Excel Macro-Enabled Workbook), da vi bliver nødt til at køre VBA-koden (en makro).
  • Åbn den grundlæggende visuelle editor med en genvejstast (Alt + F11) eller brug kommandoen 'Visual Basic' i gruppen 'Kode' i fanen 'Udvikler' i Excel.
  • Dobbeltklik på 'ThisWorkbook' i venstre side af VBA-editoren, og vælg 'Workbook' på listen, der vises derefter øverst på skærmen.
  • Vælg 'Åbn' fra listen.
  • Nu skal vi skrive koden mellem disse to linjer.
  • Først erklærer vi variabler, der holder objekterne (MS Word-dokument og MS Word-applikationsobjekt) og en 'strengvariabel', der indeholder navnet på dokumentet, hvorfra vi har brug for at udtrække tabellerne.
  • Til fejlhåndtering tilføjer vi en erklæring. Denne erklæring fortæller VBA-programmet at ignorere fejlen og genoptage udførelsen med den næste kodelinje. “On Error Resume Next” udsagn løser ikke runtime-fejlene, men det betyder simpelthen, at programudførelsen fortsætter fra linjen, der følger den linje, der forårsagede fejlen.
  • Nu bruger vi GetObject-funktionen til at få adgang til den aktuelle forekomst af Word Application Object.
  • Hvis der ikke er nogen aktuel forekomst af MS Word-applikationen, eller ActiveX-komponenten ikke kan oprette et objekt eller returnere reference til dette objekt, så fejl 429. Til dette tilføjer vi nedenfor to linjer i koden. Efter håndtering af fejlen skal vi oprette en forekomst af MS Word-applikationsobjektet ved hjælp af funktionen CreateObject .
  • For at gøre MS Word-applikationen synlig ændrer vi den synlige egenskab for 'WdApp' -objektet til SAND .
  • Vi skal finde placeringen og filnavnet på orddokumentet, hvorfra vi vil importere tabellerne til et excel-ark og tildele det samme til "strDocName". For at finde navn og placering, og vi kan tjekke egenskaberne for fil.

For at åbne dialogboksen 'Egenskaber' skal du bare vælge filen og trykke på 'Alt + Enter'.

  • Hvis filen ikke findes på den angivne placering, returnerer koden meddelelsen om, at "Filen markerer detaljer blev ikke fundet i mappestien." Titlen ville være "Undskyld, dette dokumentnavn findes ikke."
  • Nu er vi nødt til at aktivere MS Word-applikationen og tildele variablen 'wddoc' med orddokumentet, der har filnavnet gemt i 'strDocName.'
  • Hvis filen ikke allerede er åbnet, skal vi åbne dokumentet og aktivere appen.
  • Efter at have aktiveret orddokumentet skal vi få adgang til tabellerne i dokumentet. For at gøre det samme opretter vi nogle variabler.

Tble er heltalsvariablen, som gemmer antallet af tabeller i dokumentet.

rowWd er den lange variabel, som gemmer antallet af rækker i en bestemt tabel.

colWd er den lange variabel, som gemmer antallet af kolonner i en bestemt tabel.

  • Vi er nødt til at tælle antallet af tabeller i dokumentet, og hvis der er bemærkelsesværdigt i dokumentet, viser vi en meddelelsesboks til brugeren om, at "Ingen tabeller findes i Word-dokumentet."
  • For at få adgang til tabeller i dokumentet og til at skrive indholdet i excel-arket kører vi et 'For' VBA-løkke et antal tabeller gange, og inden for dette VBA-løb kører vi indlejrede 'for' løkker til adgang til hver række og hver kolonne i rækken.
  • Da vi ikke vil gemme dokumentet og afslutte applikationen. Vi bør også frigøre systemets hukommelse. For at gøre det samme skriver vi følgende kode.

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

Ting at huske

  1. Der er et objekt med en enkelt forekomst, for hvilket der kun genereres en forekomst af objektet, uanset det nummer, som CreateObject køres for. GetObject-funktionen returnerer til enhver tid den samme forekomst, når den kaldes med en streng af nul længde, og der kommer en fejl, hvis argumentet 'stienavn' ikke nævnes.
  2. Vi kan ikke bruge GetObject til at få adgang til en reference til en klasse oprettet med VBA.
  3. Hvis der i tilfælde af, at der ikke er nogen aktiv forekomst af MS Word-applikationen, eller hvis vi ikke vil have objektet startet med en fil allerede indlæst, så bruger vi først funktionen CreateObject til at oprette objektet og derefter bruge GetObject-funktionen til at få adgang til objektet .

Interessante artikler...