VBA GetObject - Hur använder jag GetObject-funktionen i Excel VBA?

Innehållsförteckning

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 funktionen GETOBJECT 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. Objekttyp: Vi anger vilken typ av objektklass som ska skapas.

Exempel på Excel VBA GETOBJECT-funktion

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 grundläggande visuella redigeraren med en genvägsknapp (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' i 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 körtidsfelen, 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 ActiveX-komponenten inte kan skapa ett objekt eller returnera referens till det här objektet, 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 för orddokumentet från vilket vi vill importera tabellerna till ett excel-ark och tilldela detsamma till "strDocName" För att hitta namn och plats, och vi kan kolla egenskaperna för fil.

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 som har 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 finns anmärkningsvärt i dokumentet, kommer vi att visa en meddelanderuta för användaren att "Inga tabeller hittades i Word-dokumentet."
  • För att få åtkomst till tabeller i dokumentet och för att skriva innehållet i excel-arket kommer vi att köra en "For" 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 och 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.

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

Saker att komma ihåg

  1. Det finns något objekt med en enda instans, 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 förekomst 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 sedan använder GetObject-funktionen för att komma åt objektet .

Intressanta artiklar...