VBA GetObject - Wie verwende ich die GetObject-Funktion in Excel VBA?

Inhaltsverzeichnis

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 bereits erwähnt. 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

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 visuellen Basiseditor 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 Liste, die danach oben auf dem Bildschirm angezeigt wird.
  • 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, bedeutet jedoch 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 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, wird der Fehler 429 angezeigt. 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 des Dokuments überprüfen Datei.

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, in der die Anzahl der Spalten in einer bestimmten Tabelle gespeichert wird.

  • Wir müssen die Anzahl der Tabellen im Dokument zählen. Wenn das Dokument eine bemerkenswerte 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 mehrmals eine 'For'-VBA-Schleife aus, und innerhalb dieser VBA-Schleife führen wir verschachtelte' for'-Schleifen aus, um auf jede Zeile zuzugreifen und 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 von GETOBJECT erstelltes Objekt Dim WdApp As Object, wddoc As Object Rem Deklarieren einer Zeichenfolgenvariablen 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," Entschuldigung, dieser Dokumentname existiert nicht. " ) 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 Next colWd Rem Zur nächsten Zeile gehen und mit Spalte 1 beginnen 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. Wenn das Argument 'Pfadname' nicht erwähnt wird, tritt ein Fehler auf.
  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 Funktion CreateObject, um das Objekt zu erstellen, und verwenden dann die Funktion GetObject, um auf das Objekt zuzugreifen .

Interessante Beiträge...