VBA GetObject

Excel VBA GETOBJECT-Funktion

Wir können die GetObject-Funktion in VBA in MS Excel verwenden, um aus der Excel-Datei auf ein ActiveX-Objekt zuzugreifen und das Objekt dann einer Objektvariablen zuzuweisen. Um die OLE-Technologie (Object Linking and Embedding) oder die COM-Technologie (Compound Object Module) zur Steuerung von Microsoft-Anwendungen wie MS Word, MS Outlook, MS PowerPoint und Internet Explorer usw. zu verwenden, können Sie die VBA GETOBJECT-Funktion verwenden.

Wir verwenden die CreateObject-Funktion, um das Objekt zu erstellen, und die GETOBJECT-Funktion gibt den Verweis auf das Objekt zurück.

Syntax für die GETOBJECT-Funktion

Die GET OBJECT-Funktion hat folgende benannte Argumente:

  1. Pfadname: Wir müssen den vollständigen Pfad und den Namen der Datei angeben, die das abzurufende Objekt enthält. Dies ist ein optionales Argument. Tatsächlich sind beide Argumente in der GetObject-Funktion optional. Wenn jedoch 'Pfadname' weggelassen wird, ist das zweite Argument 'Klasse' erforderlich.
  2. Klasse : Dies ist auch ein optionales Argument, wie zuvor angegeben. Dies akzeptiert eine Zeichenfolge, die die Klasse des Objekts darstellt.

Wir verwenden die Syntax 'appname.objecttype', um das Argument 'class' anzugeben.

  1. Anwendungsname: Wir müssen den Anwendungsnamen angeben, der das Objekt bereitstellt.
  2. Objekttyp: Wir geben den Typ der zu erstellenden Objektklasse an.

Beispiel für eine Excel VBA GETOBJECT-Funktion

Sie können diese VBA GetObject-Vorlage hier herunterladen - VBA GetObject-Vorlage

Angenommen, wir haben ein Word-Dokument mit 3 Tabellen.

Wir möchten einen VBA-Code schreiben, der alle Tabellen im Dokument in das Excel-Blatt importiert. Um dasselbe zu tun, müssen wir die Funktionen CreateObject und GetObject in VBA verwenden.

Schritte wären:

  • Erstellen Sie eine Excel-Datei und speichern Sie die Datei mit der Excel-Erweiterung .xlsm (Excel Macro-Enabled Workbook), da wir den VBA-Code (ein Makro) ausführen müssen.
  • Öffnen Sie den Visual Basic-Editor mit einer Tastenkombination (Alt + F11) oder verwenden Sie den Befehl 'Visual Basic' in der Gruppe 'Code' auf der Registerkarte 'Entwickler' in Excel.
  • Doppelklicken Sie auf der linken Seite des VBA-Editors auf "ThisWorkbook" und wählen Sie "Workbook" aus der danach oben auf dem Bildschirm angezeigten Liste.

  • Wählen Sie "Öffnen" aus der Liste.

  • Jetzt müssen wir den Code zwischen diese beiden Zeilen schreiben.

  • Zunächst deklarieren wir Variablen für die Objekte (MS Word-Dokument und MS Word-Anwendungsobjekt) und eine 'String-Variable' für den Namen des Dokuments, aus dem die Tabellen extrahiert werden sollen.

  • Zur Fehlerbehandlung fügen wir eine Anweisung hinzu. Diese Anweisung weist das VBA-Programm an, den Fehler zu ignorieren und die Ausführung mit der nächsten Codezeile fortzusetzen. Die Anweisung "On Error Resume Next" behebt die Laufzeitfehler nicht, sondern bedeutet lediglich, dass die Programmausführung ab der Zeile fortgesetzt wird, die der Zeile folgt, die den Fehler verursacht hat.

  • Jetzt verwenden wir die GetObject-Funktion , um Zugriff auf die aktuelle Instanz des Word-Anwendungsobjekts zu erhalten.

  • Wenn für den Fall, dass keine aktuelle Instanz der MS Word-Anwendung vorhanden ist oder die ActiveX-Komponente kein Objekt erstellen oder keinen Verweis auf dieses Objekt zurückgeben kann, Fehler 429. Dazu werden im Code zwei Zeilen hinzugefügt. Nach der Behandlung des Fehlers müssen wir mit der Funktion CreateObject eine Instanz des MS Word-Anwendungsobjekts erstellen .

  • Um MS Word Application sichtbar zu machen, ändern wir die sichtbare Eigenschaft des 'WdApp'- Objekts in TRUE .

  • Wir müssen den Speicherort und den Dateinamen des Word-Dokuments ermitteln, aus dem wir die Tabellen in eine Excel- Tabelle importieren möchten, und diese dem „strDocName“ zuweisen. Um den Namen und den Speicherort zu ermitteln, können wir die Eigenschaften der Datei überprüfen .

Um das Dialogfeld "Eigenschaften" zu öffnen , wählen Sie einfach die Datei aus und drücken Sie "Alt + Eingabetaste" .

  • Wenn die Datei nicht am angegebenen Speicherort vorhanden ist, gibt der Code die Meldung "Die Datei markiert Details wurde nicht im Ordnerpfad gefunden" zurück. Der Titel lautet "Entschuldigung, dieser Dokumentname existiert nicht."

  • Jetzt müssen wir die MS Word-Anwendung aktivieren und die Variable 'wddoc' dem Word-Dokument zuweisen , dessen Dateiname im 'strDocName' gespeichert ist .

  • Wenn die Datei noch nicht geöffnet ist, müssen wir das Dokument öffnen und die App aktivieren.

  • Nach dem Aktivieren des Word-Dokuments müssen wir auf die Tabellen im Dokument zugreifen. Um dasselbe zu tun, werden wir einige Variablen erstellen.

Tble ist die Ganzzahlvariable, die die Anzahl der Tabellen im Dokument speichert.

rowWd ist die lange Variable, die die Anzahl der Zeilen in einer bestimmten Tabelle speichert.

colWd ist die lange Variable, die die Anzahl der Spalten in einer bestimmten Tabelle speichert.

  • Wir müssen die Anzahl der Tabellen im Dokument zählen. Wenn das Dokument keine Tabelle enthält, wird dem Benutzer das Meldungsfeld "Keine Tabellen im Word-Dokument gefunden" angezeigt .

  • Um auf Tabellen im Dokument zuzugreifen und den Inhalt in das Excel-Blatt zu schreiben, führen wir mehrere Male eine 'For'-VBA-Schleife aus, und innerhalb dieser VBA-Schleife führen wir verschachtelte' for'-Schleifen aus, um auf jede Zeile und zuzugreifen jede Spalte in der Zeile.

  • Da wir das Dokument nicht speichern und die Anwendung beenden möchten. Wir sollten auch den Speicher des Systems freigeben. Um dasselbe zu tun, schreiben wir den folgenden Code.

Wenn wir jetzt die Excel-Datei öffnen, wird die Füllung mit dem Tabelleninhalt aus dem Word-Dokument aktualisiert.

Code:

Private Sub Workbook_Open () Rem Deklarieren von Objektvariablen für den Zugriff auf ein von GETOBJECT erstelltes Objekt Dim WdApp As Object, wddoc As Object Rem Deklarieren einer Stringvariablen für den Zugriff auf das Word-Dokument Dim strDocName As String Rem Fehlerbehandlung bei Fehler Fortsetzen Weiter Rem Aktivieren von MS Word, falls dies der Fall ist ist bereits geöffnet Set WdApp = GetObject (, "Word.Application") Wenn Err.Number = 429 Dann Err.Clear Rem Erstellen eines Word-Anwendungsobjekts, wenn MS Word noch nicht geöffnet ist Set WdApp = CreateObject ("Word.Application") End If WdApp.Visible = True strDocName = "C: \ Users \ CBA7_01 \ Desktop \ Marks Details.docx" Rem Überprüfen des relevanten Verzeichnisses für das relevante Dokument Rem Wenn nicht gefunden, dann den Benutzer informieren und das Programm schließen If Dir (strDocName) = " "Dann MsgBox" Die Datei "& strDocName & vbCrLf &"wurde nicht im Ordnerpfad "& vbCrLf &" C: \ Users \ CBA7_01 \. ", _vbExclamation," Dieser Dokumentname ist leider nicht vorhanden. " ) Wenn wddoc nichts ist, setzen Sie wddoc = WdApp.Documents.Open ("C: \ Benutzer \ CBA7_01 \ Desktop \ Marks Details.docx") wddoc.Activate Rem Definieren von Variablen für den Zugriff auf die Tabellen im Word-Dokument Dim Tble As Integer Dim rowWd As Long Dim colWd As Integer Dim x As Long, y As Long x = 1 y = 1 Mit wddoc Tble = wddoc.Tables.Count Wenn Tble = 0, dann MsgBox "Keine Tabellen im Word-Dokument gefunden", vbExclamation, "No. Zu importierende Tabellen "Exit Sub End If Rem Starten des Schleifenprozesses für den Zugriff auf Tabellen und deren Zeilen, Spalten For i = 1 To Tble With .Tables (i) For rowWd = 1 To .Rows.Count For colWd = 1 To .Columns.Zellen zählen (x, y) = WorksheetFunction.Clean (.cell (rowWd, colWd) .Range.Text) Rem Zugriff auf die nächste Spalte y = y + 1 Nächste Spalte Rem Wechseln Sie zur nächsten Zeile und beginnen Sie mit Spalte 1 y = 1 x = x + 1 Next rowWd End With Next End With Rem Wir müssen das Word-Dokument wddoc nicht speichern. Schließen Sie Savechanges: = False Rem. Wir beenden die MS Word-Anwendung WdApp.Quit Rem. Wir geben schließlich den Systemspeicher frei, der für die 2 Objektvariablen Set wddoc zugewiesen ist = Nothing Set WdApp = Nothing End SubRem beenden Rem Wir geben endlich den Systemspeicher frei, der für die 2 Objektvariablen festgelegt ist. Set wddoc = Nothing Set WdApp = Nothing End SubRem beenden Rem Wir geben endlich den Systemspeicher frei, der für die 2 Objektvariablen festgelegt ist. Set wddoc = Nothing Set WdApp = Nothing End Sub

Dinge, an die man sich erinnern sollte

  1. Es gibt ein Einzelinstanzobjekt, für das nur eine Instanz des Objekts generiert wird, unabhängig von der Nummer, für die CreateObject ausgeführt wird. Die GetObject-Funktion gibt immer dieselbe Instanz zurück, wenn sie mit einer Zeichenfolge von Null aufgerufen wird und ein Fehler auftritt, wenn das Argument 'Pfadname' nicht erwähnt wird.
  2. Wir können GetObject nicht verwenden, um auf einen Verweis auf eine mit VBA erstellte Klasse zuzugreifen.
  3. Wenn für den Fall keine aktive Instanz der MS Word-Anwendung vorhanden ist oder das Objekt nicht mit einer bereits geladenen Datei initiiert werden soll, verwenden wir zuerst die CreateObject-Funktion, um das Objekt zu erstellen, und verwenden dann die GetObject-Funktion, um auf das Objekt zuzugreifen.