VBA GetObject

Excel VBA GETOBJECT-functie

We kunnen de GetObject-functie in VBA in MS Excel gebruiken om toegang te krijgen tot een ActiveX-object vanuit het Excel-bestand en het object vervolgens aan een objectvariabele toe te wijzen. Om OLE (Object Linking and Embedding) of COM (Compound Object Module) -technologie te gebruiken om elke Microsoft-applicatie zoals MS Word, MS Outlook, MS PowerPoint en Internet Explorer, enz. Te besturen, kunnen we de VBA GETOBJECT-functie gebruiken.

We gebruiken de functie CreateObject om het object te maken en de functie GETOBJECT retourneert de verwijzing naar het object.

Syntaxis voor GETOBJECT-functie

De functie GET OBJECT heeft deze genoemde argumenten:

  1. Padnaam: we moeten het volledige pad specificeren en de naam van het bestand met het op te halen object. Dit is een optioneel argument, in feite zijn beide argumenten in de GetObject-functie optioneel, maar als 'padnaam' wordt weggelaten, is het tweede argument 'klasse' vereist.
  2. Klasse : dit is ook een optioneel argument zoals eerder ook gespecificeerd. Dit accepteert een tekenreeks die de klasse van het object vertegenwoordigt.

We gebruiken de syntaxis 'appname.objecttype' om het 'class'-argument op te geven.

  1. Appnaam: we moeten de toepassingsnaam specificeren die het object zal leveren.
  2. Objecttype: we specificeren het type objectklasse dat moet worden gemaakt.

Voorbeeld van Excel VBA GETOBJECT-functie

U kunt deze VBA GetObject-sjabloon hier downloaden - VBA GetObject-sjabloon

Stel dat we een Word-document hebben met 3 tabellen.

We willen een VBA-code schrijven die alle tabellen in het document naar het Excel-blad zal importeren. Om hetzelfde te doen, moeten we de functie CreateObject en GetObject in VBA gebruiken.

Stappen zouden zijn:

  • Maak een Excel-bestand en sla het bestand op met de .xlsm Excel-extensie (Excel Macro-Enabled Workbook), aangezien we de VBA-code (een macro) moeten uitvoeren.
  • Open de visuele basiseditor met een sneltoets (Alt + F11) of gebruik de opdracht 'Visual Basic' in de groep 'Code' op het tabblad 'Ontwikkelaar' in Excel.
  • Dubbelklik op 'ThisWorkbook' aan de linkerkant van de VBA-editor en kies 'Workbook' uit de lijst die daarna bovenaan het scherm wordt weergegeven.

  • Kies 'Openen' uit de lijst.

  • Nu moeten we de code tussen deze twee regels schrijven.

  • Eerst zullen we variabelen declareren voor de objecten (MS Word-document en MS Word-toepassingsobject) en een 'String-variabele' om de naam van het document vast te houden waaruit we de tabellen moeten extraheren.

  • Voor foutafhandeling zullen we één instructie toevoegen, deze instructie vertelt het VBA-programma om de fout te negeren en de uitvoering te hervatten met de volgende regel code. De instructie 'On Error Resume Next' lost de runtime-fouten niet op, maar het betekent gewoon dat de uitvoering van het programma doorgaat vanaf de regel die volgt op de regel die de fout veroorzaakte.

  • Nu zullen we de GetObject-functie gebruiken om toegang te krijgen tot het huidige exemplaar van het Word-toepassingsobject.

  • Als in het geval dat er geen huidig ​​exemplaar van de MS Word-toepassing of ActiveX-component is, geen object kan maken of een verwijzing naar dit object kan retourneren, dan is fout 429. Hiervoor zullen we hieronder twee regels in de code toevoegen. Nadat we de fout hebben afgehandeld, moeten we een instantie van het MS Word-toepassingsobject maken met de functie CreateObject .

  • Om MS Word-applicatie zichtbaar te maken, veranderen we de zichtbare eigenschap van het 'WdApp'- object in TRUE .

  • We moeten de locatie en bestandsnaam vinden van het Word-document waaruit we de tabellen in een Excel-blad willen importeren en deze toewijzen aan de "strDocName". Om de naam en locatie te vinden, kunnen we de eigenschappen van het bestand bekijken .

Om het dialoogvenster 'Eigenschappen' te openen, selecteert u het bestand en drukt u op 'Alt + Enter' .

  • Als het bestand niet bestaat op de opgegeven locatie, retourneert de code het bericht met de melding "Het bestand Marks Details is niet gevonden in het mappad". De titel zou zijn "Sorry, die documentnaam bestaat niet."

  • Nu moeten we de MS Word-applicatie activeren en de variabele 'wddoc' toewijzen aan het woorddocument met de bestandsnaam opgeslagen in de 'strDocName' .

  • Als het bestand nog niet is geopend, moeten we het document openen en de app activeren.

  • Nadat we het Word-document hebben geactiveerd, hebben we toegang tot de tabellen in het document nodig. Om hetzelfde te doen, zullen we enkele variabelen maken.

Tble is de integervariabele die het aantal tabellen in het document opslaat.

rowWd is de lange variabele die het aantal rijen in een bepaalde tabel opslaat.

colWd is de lange variabele, die het aantal kolommen in een bepaalde tabel opslaat.

  • We moeten het aantal tabellen in het document tellen en als er geen tabel in het document is, zullen we een berichtvenster aan de gebruiker tonen dat "Geen tabellen gevonden in het Word-document" .

  • Om toegang te krijgen tot tabellen in het document en om de inhoud in het Excel-blad te schrijven, zullen we een 'For' VBA-lus voor een aantal tabeltijden uitvoeren en binnen deze VBA-lus zullen we geneste 'for'-lussen uitvoeren voor toegang tot elke rij en elke kolom in de rij.

  • Omdat we het document niet willen opslaan en de applicatie willen afsluiten. We moeten ook het geheugen van het systeem vrijgeven. Om hetzelfde te doen, zullen we de volgende code schrijven.

Telkens wanneer we het Excel-bestand openen, wordt de vulling bijgewerkt met de tabelinhoud uit het Word-document.

Code:

Private Sub Workbook_Open () Rem Objectvariabelen declareren om toegang te krijgen tot objecten gemaakt door GETOBJECT Dim WdApp As Object, wddoc As Object Rem Declaratie van een stringvariabele om toegang te krijgen tot het Word-document Dim strDocName As String Rem Foutafhandeling On Error Resume Next Rem MS Word activeren als het is al geopend Set WdApp = GetObject (, "Word.Application") If Err.Number = 429 Then Err.Clear Rem Een Word-toepassingsobject maken als MS Word nog niet is geopend Set WdApp = CreateObject ("Word.Application") End If WdApp.Visible = True strDocName = "C: \ Users \ CBA7_01 \ Desktop \ Marks Details.docx" Rem Controle van relevante directory voor het relevante document Rem Indien niet gevonden, informeer de gebruiker en sluit het programma If Dir (strDocName) = " "Then MsgBox" Het bestand "& strDocName & vbCrLf &"is niet gevonden in het mappad "& vbCrLf &" C: \ Users \ CBA7_01 \. ", _vbExclamation," Sorry, die documentnaam bestaat niet. "Exit Sub End If WdApp.Activate Set wddoc = WdApp.Documents (strDocName ) Als wddoc niets is, stel dan wddoc = WdApp.Documents.Open ("C: \ Users \ CBA7_01 \ Desktop \ Marks Details.docx") wddoc.Activate Rem Variabelen definiëren om toegang te krijgen tot de tabellen in het 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 "Geen tabellen gevonden in het Word-document", vbExclamation, "Nee Te importeren tabellen "Exit Sub End If Rem Starten van het lusproces om toegang te krijgen tot tabellen en hun rijen, kolommen For i = 1 To Tble With .Tables (i) For rowWd = 1 To .Rows.Count For colWd = 1 To .Columns.Cellen tellen (x, y) = WorksheetFunction.Clean (.cell (rowWd, colWd) .Range.Text) Rem Toegang tot volgende kolom y = y + 1 Volgende colWd Rem Naar de volgende rij gaan en beginnen bij kolom 1 y = 1 x = x + 1 Next rowWd End With Next End Met Rem hoeven we het woord document wddoc niet op te slaan.Close Save change: = False Rem we stoppen MS Word applicatie WdApp.Quit Rem We geven eindelijk het systeemgeheugen vrij dat is toegewezen voor de 2 objectvariabelen Set wddoc = Niets ingesteld WdApp = Niets eindigt SubStop Rem We geven eindelijk het systeemgeheugen vrij dat is toegewezen aan de 2 objectvariabelen Set wddoc = Nothing Set WdApp = Nothing End SubStop Rem We geven eindelijk het systeemgeheugen vrij dat is toegewezen aan de 2 objectvariabelen Set wddoc = Nothing Set WdApp = Nothing End Sub

Dingen om te onthouden

  1. Er is een enkel exemplaar-object waarvoor slechts één exemplaar van het object wordt gegenereerd, ongeacht het aantal waarvoor CreateObject wordt uitgevoerd. De functie GetObject retourneert altijd dezelfde instantie wanneer deze wordt aangeroepen met een tekenreeks met een lengte van nul en er treedt een fout op als het argument 'padnaam' niet wordt genoemd.
  2. We kunnen GetObject niet gebruiken om toegang te krijgen tot een verwijzing naar een klasse die is gemaakt met VBA.
  3. Als er in het geval geen actieve instantie van de MS Word-toepassing is, of als we niet willen dat het object wordt gestart met een bestand dat al is geladen, gebruiken we eerst de functie CreateObject om het object te maken en gebruiken we vervolgens de functie GetObject om toegang te krijgen tot het object.