VBA GetObject - Hvordan bruker jeg GetObject-funksjonen i Excel VBA?

Innholdsfortegnelse

Excel VBA GETOBJECT-funksjon

Vi kan bruke GetObject-funksjonen i VBA i MS Excel for å få tilgang til et ActiveX-objekt fra excel-filen og deretter tildele objektet til en objektvariabel. For å bruke OLE (Object Linking and Embedding) eller COM (Compound Object Module) teknologi for å kontrollere ethvert Microsoft-program som MS Word, MS Outlook, MS PowerPoint og Internet Explorer osv., Kan vi bruke VBA GETOBJECT-funksjonen.

Vi bruker CreateObject-funksjonen til å lage objektet, og GETOBJECT-funksjonen returnerer referansen til objektet.

Syntaks for GETOBJECT-funksjon

GET OBJECT-funksjonen har disse navngitte argumentene:

  1. Banenavn: Vi må spesifisere hele banen og navnet på filen som inneholder objektet du skal hente. Dette er et valgfritt argument. Faktisk er begge argumentene i GetObject-funksjonen valgfrie, men hvis 'pathname' er utelatt, kreves det andre argumentet 'class'.
  2. Klasse : Dette er også et valgfritt argument som spesifisert tidligere også. Dette aksepterer en streng som representerer klassen til objektet.

Vi bruker syntaksen 'appname.objecttype' for å spesifisere 'klasse' argument.

  1. Appnavn: Vi må spesifisere applikasjonsnavnet, som vil gi objektet.
  2. Objekttype: Vi spesifiserer typen objektklasse som skal opprettes.

Eksempel på Excel VBA GETOBJECT-funksjon

Anta at vi har et orddokument som inneholder tre tabeller.

Vi ønsker å skrive en VBA-kode som vil importere alle tabellene i dokumentet til excel-arket. For å gjøre det samme, må vi bruke CreateObject og GetObject-funksjonen i VBA.

Fremgangsmåten vil være:

  • Lag en excel-fil og lagre filen med .xlsm excel-utvidelsen (Excel Macro-Enabled Workbook) da vi trenger å kjøre VBA-koden (en makro).
  • Åpne den grunnleggende visuelle redigereren med en hurtigtast (Alt + F11) eller bruk kommandoen 'Visual Basic' i gruppen 'Kode' i kategorien 'Utvikler' i Excel.
  • Dobbeltklikk på 'ThisWorkbook' på venstre side av VBA-redigereren, og velg 'Workbook' fra listen som vises på toppen av skjermen.
  • Velg 'Åpne' fra listen.
  • Nå må vi skrive koden mellom disse to linjene.
  • Først vil vi erklære variabler som inneholder objektene (MS Word-dokument og MS Word-applikasjonsobjekt) og en "strengvariabel" for å holde navnet på dokumentet der vi trenger å trekke ut tabellene.
  • For feilhåndtering vil vi legge til en uttalelse. Denne uttalelsen forteller VBA-programmet å ignorere feilen og fortsette kjøringen med neste kodelinje. Uttrykket "On Error Resume Next" løser ikke kjøretidsfeilene, men det betyr ganske enkelt at programutførelsen vil fortsette fra linjen som følger linjen som forårsaket feilen.
  • Nå skal vi bruke GetObject-funksjonen for å få tilgang til den gjeldende forekomsten av Word Application Object.
  • Hvis det ikke er noen aktuell forekomst av MS Word-applikasjonen, eller ActiveX-komponenten ikke kan opprette et objekt eller returnere referanse til dette objektet, vil feil 429. For dette vil vi legge til under to linjer i koden. Etter å ha håndtert feilen, må vi opprette en forekomst av MS Word Application-objektet ved hjelp av CreateObject-funksjonen .
  • For å gjøre MS Word-applikasjonen synlig, vil vi endre den synlige egenskapen til 'WdApp' -objektet til SANT .
  • Vi må finne plasseringen og filnavnet til orddokumentet som vi vil importere tabellene fra, til et Excel-ark og tildele det samme til "strDocName". For å finne navnet og plasseringen, kan vi sjekke ut egenskapene til fil.

For å åpne dialogboksen Egenskaper , velg bare filen og trykk 'Alt + Enter'.

  • Hvis filen ikke eksisterer på den angitte plasseringen, returnerer koden meldingen "Filen merker detaljer ble ikke funnet i mappestien." Tittelen ville være "Beklager, dokumentnavnet eksisterer ikke."
  • Nå må vi aktivere MS Word-applikasjonen og tilordne variabelen 'wddoc' med orddokumentet som har filnavnet lagret i 'strDocName.'
  • Hvis filen ikke allerede er åpnet, må vi åpne dokumentet og aktivere appen.
  • Etter å ha aktivert orddokumentet, må vi få tilgang til tabellene i dokumentet. For å gjøre det samme vil vi lage noen variabler.

Tble er heltallvariabelen, som lagrer antall tabeller i dokumentet.

rowWd er den lange variabelen, som vil lagre antall rader i en bestemt tabell.

colWd er den lange variabelen, som vil lagre antall kolonner i en bestemt tabell.

  • Vi må telle antall tabeller i dokumentet, og hvis det er bemerkelsesverdig i dokumentet, vil vi vise en meldingsboks til brukeren som "Ingen tabeller funnet i Word-dokumentet."
  • For å få tilgang til tabeller i dokumentet og for å skrive innholdet i excel-arket, vil vi kjøre en "For" VBA-løkke for et antall tabeller ganger, og innenfor denne VBA-løkken vil vi kjøre nestede "for" løkker for tilgang til hver rad og hver kolonne i raden.
  • Da vi ikke vil lagre dokumentet og avslutte applikasjonen. Vi bør også frigjøre minnet til systemet. For å gjøre det samme vil vi skrive 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 å huske

  1. Det er noe enkeltforekomstobjekt, som bare én forekomst av objektet genereres for, uavhengig av nummeret CreateObject kjøres for. GetObject-funksjonen returnerer til enhver tid den samme forekomsten når den kalles med en streng med null lengde, og det kommer en feil hvis argumentet 'pathname' ikke er nevnt.
  2. Vi kan ikke bruke GetObject for å få tilgang til en referanse til en klasse opprettet med VBA.
  3. Hvis det i tilfelle ikke er noen aktiv forekomst av MS Word-applikasjonen, eller hvis vi ikke vil at objektet er startet med en fil som allerede er lastet, bruker vi først CreateObject-funksjonen til å opprette objektet, og deretter bruker du GetObject-funksjonen for å få tilgang til objektet .

Interessante artikler...