Steuern Sie Excel aus Word mit VBA in Microsoft Excel 2010

Anonim

Manchmal müssen wir Daten aus einem Word-Dokument in eine Excel-Datei kopieren. Wir können dies sehr einfach mit einem Makro in allen Office-Versionen tun. Das Makro öffnet eine vorhandene / neue Excel-Datei, kopiert den Inhalt und speichert und schließt die Datei dann. Mal sehen, wie das gemacht wird.

Option explizit


Unter OpenAndReadWordDoc()
Dim tString As String
Dim p so lang, r so lang
Dim wrdApp als Objekt, wrdDoc als Objekt
Dim wb als Arbeitsmappe
Dim trange als Variante

Set wb = Workbooks.Add
Mit wb.Worksheets(1).Range(“A1”)
.Wert = „Word-Dokumentinhalt:“
.Font.Bold = True
.Schriftgröße = 14
.Offset(1,0).Wählen
Ende mit

r = 3

Setze wrdApp = CreateObject("Word.Application")
wrdApp.Visible = True
Set wrdDoc = wrdApp.Documents.Open("B:\Test\MyNewWordDoc.docx")

Mit wrdDoc
Für p = 1 bis .Paragraphs.Count
Set trange = .Range(Start:=.Paragraphs(p).Range.Start, _
Ende:=.Absätze(p).Bereich.Ende)
tString = trange.Text
tString = Left(tString, Len(tString)-1)

Wenn Instr(1, tString”,1”) > 0 Then
wb.Worksheets(1).Range(“A” & r).Wert = tString
r=r+1
Ende Wenn

Nächstes p
.Nah dran

Ende mit

wrdApp.Beenden
wrdDoc = Nichts setzen
wrdApp = Nichts setzen
wb.Saved = True

End Sub

Um den obigen Code in Ihre Datei zu kopieren,

  • Drücken Sie Alt + F11 auf der Tastatur
  • Auf der linken Seite sehen Sie Microsoft Excel-Objekte
  • Klicken Sie mit der rechten Maustaste und wählen Sie Einfügen
  • Klicken Sie dann auf Modul
  • Kopiere den Code in das Codefenster rechts

Sehen wir uns nun an, wie dieser Code funktioniert -

Zuerst deklarieren wir die Variablen, die wir brauchen -tstring als String, um Text aufzunehmen (wir werden später sehen, welcher Text). 2 Variablen „p“ & „r“ als Zähler. Diese sind vom Typ „lang“. Dann haben wir die 2 Objektvariablen wrdApp und wrdDoc. wrdApp ist das Wortanwendungsobjekt und wrdDoc ist das Word-Dokumentobjekt. Wb ist unsere Arbeitsmappenvariable für die neue Arbeitsmappe, die im Code erstellt wird. Wenn Sie eine vorhandene Arbeitsmappe öffnen, können Sie dieser stattdessen diese Variable zuweisen. Die letzte Variable ist der Variablentyp trange, der den Inhalt hat, der aus dem Word-Dokument in die Excel-Datei übertragen werden muss.

Set wb = Workbooks.Add

Dadurch wird die neue Arbeitsmappe der wb-Variablen zugewiesen. Wenn Sie keine neue Arbeitsmappe hinzufügen, sondern eine vorhandene Arbeitsmappe öffnen möchten, können Sie diese Zeile wie folgt ändern -
wb setzen - Workbooks.Open("B:\Test\File1.xlsx")

Mit wb.Worksheets(1).Range(“A1”)
.Wert = „Word-Dokumentinhalt:“
.Font.Bold = True
.Schriftgröße = 14
.Offset(1,0).Wählen
Ende mit

Mit wb.Worksheets(1).range("A1") können Sie schnell darauf verweisen. Sie müssen es also nicht für jede der Codezeilen zwischen den Anweisungen With und End with wiederholen.

Diese Codezeilen setzen den Text "Word Document Contents:" mit einer fetten Schriftart und Schriftgröße 14 in Zelle A1 der 1NS Arbeitsblatt in der neuen Arbeitsmappe. Und dann .Offset(1,0).Select wählt die nächste Zeile aus.

r = 3

Der Variablen „r“ wird der Wert 3 zugewiesen, da dies die Startzeile in der Excel-Datei für die zu kopierenden Daten aus dem Word-Dokument ist.

Setze wrdApp = CreateObject("Word.Application")

Wenn Word bereits in Ihrem System ausgeführt wird,Objekt erstellenerstellt eine neue Instanz von Word. Diese Zeile weist also der Word-Anwendung die Objektvariable wrdApp zu, die Sie später im Code verwenden können.

wrdApp.Visible = True

Die neu erstellte Instanz von Word wird beim Erstellen nicht angezeigt. Um es sichtbar zu machen, müssen Sie wrdApp.Visible = True setzen, damit es sichtbar ist.

Set wrdDoc = wrdApp.Documents.Open("B:\Test\MyNewWordDoc.docx")

Wir haben die neue Instanz der Word-Anwendung erstellt, aber noch kein Word-Quelldokument geöffnet. Dieser Befehl öffnet also das Word-Dokument. Diesem Dokument wurde das Objekt wrdDoc zugewiesen, damit wir es später im Code verwenden können.

Mit wrdDoc… .Ende mit

Dies ist unsere "With"-Schleife, die vollständig mit dem wrdDoc-Objekt funktioniert. Sobald Sie diese Schleife öffnen, müssen Sie den Text „wrdDoc“ in dieser Schleife nicht noch einmal wiederholen. Sie können direkt mit dem Punkt (".") vor allen Objekten beginnen, die sich auf wrdDoc beziehen. Diese Schleife endet mit dem Ende mit Stellungnahme. Nachdem die End With-Anweisung eingegeben wurde, können Sie nicht nur mit dem „.“ auf die Objekte nach wrdDoc verweisen.

Für p = 1 bis .Paragraphs.Count

Dies ist die „For“-Schleife, die von der 1NS zu den letzten Absätzen im Word-Dokument. Die Word-Datei, die die Daten enthält, enthält 100 Informationszeilen, die jeweils als separater Absatz gespeichert sind. Die Schleife erhöht sich von 1 bis 100 und kopiert die Absätze. Wenn bestimmte Bedingungen festgelegt sind, basiert das Kopieren und Einfügen auf diesen Bedingungen.

Set trange = .Range(Start:=.Paragraphs(p).Range.Start, End:=.Paragraphs(p).Range.End)

Dadurch werden der Anfang und das Ende jedes Absatzes einem Bereich zugewiesen, während die Schleife inkrementiert wird.

tString = trange.text
tString = Left(tString,len(tString)-1)

Zuerst wird der Text von trange an TString übergeben. Dann hat jeder Absatz ein Absatzzeichen am Satzende. Diese wird mit der Left-Funktion entfernt. Von der linken Seite werden alle Zeichen außer dem letzten in der Variablen tString gespeichert.

Wenn Instr(1, tString, „1“) > 0 Then
wb.Worksheets(1).Range(“A” & r).Wert = tString
r=r+1
Ende Wenn

Diese IF-Funktion prüft, ob der Text in tString die Zahl 1 enthält. Wenn sie wahr ist, kopiert sie den Inhalt von tString in die nächste verfügbare Zeile in der Arbeitsmappe. „r“ hatte zunächst den Wert 3. Mit r=r+1 inkrementieren wir ihn um 1, sodass der nächste Eintrag unter dem vorherigen platziert werden kann.

Nächstes p
.Nah dran

Die Nächstes p Codezeile inkrementiert zum nächsten Absatz.

.Nah dran schließt das Dokument, nachdem alle Absätze bearbeitet wurden. Dies ist die Ausgabe, die wir in der Excel-Datei erhalten -

Sie werden sehen, dass nur die Absätze, die irgendwo in der Nummer die Nummer 1 enthalten, in die Ausgabe aufgenommen werden.

wrdApp.Beenden
wrdDoc = Nichts setzen
wrdApp = Nichts setzen
wb.Saved = True

wrdApp.Quit schließt das Wort Application. Set wrdDoc = Nothing und Set wrdApp = Nothing gibt den von diesen 2 Objektvariablen belegten Speicher frei und setzt sie auf Nothing. wb.Saved = True speichert die Arbeitsmappe.

Mit dem obigen Code können wir steuern, welche Daten von der Word-Datei in die Excel-Datei kopiert werden sollen.