VBA GetObject

Excel VBA GETOBJECT-funktion

Vi kan använda GetObject-funktionen i VBA i MS Excel för att komma åt ett ActiveX-objekt från excel-filen och sedan tilldela objektet till en objektvariabel. För att använda OLE (Object Linking and Embedding) eller COM (Compound Object Module) -teknologi för att styra alla Microsoft-applikationer som MS Word, MS Outlook, MS PowerPoint och Internet Explorer etc. kan vi använda VBA GETOBJECT-funktionen.

Vi använder CreateObject-funktionen för att skapa objektet och GETOBJECT-funktionen returnerar referensen till objektet.

Syntax för GETOBJECT-funktion

GET OBJECT-funktionen har dessa namngivna argument:

  1. Sökväg: Vi måste ange hela sökvägen och namnet på filen som innehåller objektet som ska hämtas. Detta är ett valfritt argument, i själva verket är båda argumenten i GetObject-funktionen valfria men om 'sökväg' utelämnas krävs det andra argumentet 'klass'.
  2. Klass : Detta är också ett valfritt argument som tidigare angivits. Detta accepterar en sträng som representerar objektets klass.

Vi använder syntaxen 'appname.objecttype' för att specificera 'class' argument.

  1. Appnamn: Vi måste ange applikationsnamnet som ger objektet.
  2. Objektyp: Vi anger typen av objektklass som ska skapas.

Exempel på Excel VBA GETOBJECT-funktion

Du kan ladda ner denna VBA GetObject-mall här - VBA GetObject-mall

Antag att vi har ett orddokument som innehåller tre tabeller.

Vi vill skriva en VBA-kod som importerar alla tabeller i dokumentet till excel-arket. För att göra detsamma måste vi använda CreateObject och GetObject-funktionen i VBA.

Stegen skulle vara:

  • Skapa en excel-fil och spara filen med .xlsm excel-tillägget (Excel Macro-Enabled Workbook) eftersom vi måste köra VBA-koden (ett makro).
  • Öppna den visuella grundredigeraren med en snabbtangent (Alt + F11) eller använd kommandot 'Visual Basic' i gruppen 'Kod' i fliken 'Utvecklare' i Excel.
  • Dubbelklicka på 'ThisWorkbook' till vänster i VBA-redigeraren och välj 'Workbook' från listan som visas därefter högst upp på skärmen.

  • Välj 'Öppna' i listan.

  • Nu måste vi skriva koden mellan dessa två rader.

  • Först kommer vi att förklara variabler för att hålla objekten (MS Word-dokument och MS Word-applikationsobjekt) och en 'Strängvariabel' för att hålla namnet på dokumentet varifrån vi behöver extrahera tabellerna.

  • För felhantering lägger vi till ett uttalande, detta uttalande säger till VBA-programmet att ignorera felet och återuppta körningen med nästa kodrad. Uttrycket "On Error Resume Next" fixar inte runtime-felen men det betyder helt enkelt att programkörningen fortsätter från raden som följer raden som orsakade felet.

  • Nu kommer vi att använda GetObject-funktionen för att få tillgång till den aktuella instansen av Word Application Object.

  • Om det inte finns någon aktuell instans av MS Word-applikationen eller kan ActiveX-komponenten inte skapa ett objekt eller returnera referens till detta objekt då fel 429. För detta lägger vi till nedan två rader i koden. Efter att ha hanterat felet måste vi skapa en instans av MS Word Application-objektet med funktionen CreateObject .

  • För att göra MS Word-applikationen synlig ändrar vi den synliga egenskapen för 'WdApp'- objektet till SANT .

  • Vi måste hitta platsen och filnamnet på orddokumentet från vilket vi vill importera tabellerna till ett excel-ark och tilldela detsamma till "strDocName". För att hitta namn och plats kan vi kolla in filens egenskaper .

För att öppna dialogrutan 'Egenskaper' , välj bara filen och tryck på 'Alt + Enter' .

  • Om filen inte finns på den angivna platsen returnerar koden meddelandet om att "Filen märker detaljer hittades inte i mappvägen". Titeln skulle vara "Tyvärr, det dokumentnamnet finns inte."

  • Nu måste vi aktivera MS Word-applikationen och tilldela variabeln 'wddoc' med orddokumentet med filnamnet lagrat i 'strDocName' .

  • Om filen inte redan har öppnats måste vi öppna dokumentet och aktivera appen.

  • Efter att ha aktiverat orddokumentet måste vi komma åt tabellerna i dokumentet. För att göra detsamma skapar vi några variabler.

Tble är heltalsvariabeln, som lagrar antalet tabeller i dokumentet.

rowWd är den långa variabeln som lagrar antalet rader i en viss tabell.

colWd är den långa variabeln som lagrar antalet kolumner i en viss tabell.

  • Vi måste räkna antalet tabeller i dokumentet och om det inte finns någon tabell i dokumentet kommer vi att visa en meddelandefält till användaren att "Inga tabeller hittades i Word-dokumentet" .

  • För att komma åt tabeller i dokumentet och för att skriva innehållet i excel-arket, kommer vi att köra en "För" VBA-loop för ett antal tabeller gånger och inom denna VBA-loop kommer vi att köra nestade "för" loopar för åtkomst till varje rad varje kolumn i raden.

  • Eftersom vi inte vill spara dokumentet och avsluta programmet. Vi bör också frigöra systemets minne. För att göra detsamma skriver vi följande kod.

Nu när vi öppnar excel-filen uppdateras fyllningen med tabellinnehåll från orddokumentet.

Koda:

Private Sub Workbook_Open () Rem Declaring Object variables to access object created by GETOBJECT Dim WdApp As Object, wddoc As Object Rem Deklarerar en strängvariabel för att komma åt Word-dokument Dim strDocName Som sträng Rem Felhantering Vid fel Återuppta nästa rem Aktivera MS Word har redan öppnats Set WdApp = GetObject (, "Word.Application") If Err.Number = 429 Then Err.Clear Rem Skapa ett Word-applikationsobjekt om MS Word inte redan har öppnats Set WdApp = CreateObject ("Word.Application") End Om WdApp.Visible = True strDocName = "C: \ Users \ CBA7_01 \ Desktop \ Marks Details.docx" Rem Kontrollera relevant katalog för relevant dokument Rem Om det inte hittas ska du informera användaren och stänga programmet If Dir (strDocName) = " "Sedan MsgBox" Filen "& strDocName & vbCrLf &"hittades inte i mappvägen "& vbCrLf &" C: \ Users \ CBA7_01 \. ", _vbExclamation," Tyvärr finns det inte namnet på dokumentet. "Avsluta underavslutning om WdApp.Activate Set wddoc = WdApp.Documents (strDocName ) Om wddoc inte är något, ange sedan wddoc = WdApp.Documents.Open ("C: \ Users \ CBA7_01 \ Desktop \ Marks Details.docx") wddoc.Activate Rem Definiera variabler för att komma åt tabellerna i orddokumentet Dim Tble As Integer Dim radWd så lång dimma colWd som heltal Dim x så lång, y så lång x = 1 y = 1 med wddoc Tble = wddoc.Tables.Count Om Tble = 0 Då MsgBox "Inga tabeller hittades i Word-dokumentet", vbExclamation, "No Tabeller för att importera "Avsluta undre slut om rem Startar loopningsprocessen för att komma åt tabeller och deras rader, kolumner För i = 1 Att tabla med. Tabeller (i) För radWd = 1 Till .Rows.Count För colWd = 1 Till .Kolumner.Räkna celler (x, y) = WorksheetFunction.Clean (.cell (rowWd, colWd) .Range.Text) Rem Åtkomst till nästa kolumn y = y + 1 Nästa colWd Rem Gå till nästa rad och börja från kolumn 1 y = 1 x = x + 1 Nästa radWd End With Next End With Rem behöver vi inte spara orddokumentet wddoc.Stäng Savechanges: = False Rem vi avslutar MS Word-applikationen WdApp.Quit Rem Vi släpper äntligen systemminnet tilldelat för de 2 objektvariablerna Ställ in wddoc = Nothing Set WdApp = Nothing End SubAvsluta rem Vi släpper äntligen systemminnet som tilldelats för de två objektvariablerna Set wddoc = Nothing Set WdApp = Nothing End SubAvsluta rem Vi släpper äntligen systemminnet som tilldelats för de 2 objektvariablerna Set wddoc = Nothing Set WdApp = Nothing End Sub

Saker att komma ihåg

  1. Det finns något enstaka objekt, för vilket endast en instans av objektet genereras, oavsett antalet som CreateObject körs för. GetObject-funktionen returnerar hela tiden samma instans när den anropas med en sträng med noll längd och ett fel kommer om argumentet 'sökväg' inte nämns.
  2. Vi kan inte använda GetObject för att komma åt en referens till en klass skapad med VBA.
  3. Om det i fallet inte finns någon aktiv instans av MS Word-applikationen, eller om vi inte vill att objektet ska initieras med en fil redan laddad, använder vi först funktionen CreateObject för att skapa objektet och använder sedan GetObject-funktionen för att komma åt objektet.