Controlați Excel din Word utilizând VBA în Microsoft Excel 2010

Anonim

Uneori trebuie să copiem date dintr-un document Word într-un fișier Excel. Putem face acest lucru foarte ușor cu un macro în toate versiunile de birou. Macro-ul va deschide un fișier Excel existent / nou, va copia conținutul și apoi va salva și închide fișierul. Să vedem cum se face acest lucru.

Opțiune explicită


Sub OpenAndReadWordDoc ()
Dim tString As String
Dim p As Long, r As Long
Dim wrdApp Ca obiect, wrdDoc ca obiect
Dim wb Ca registru de lucru
Dim trange Ca variantă

Setați wb = Workbooks.Add
Cu wb.Whehsheets (1) .Gama („A1”)
.Value = „Conținutul documentului Word:”
.Font.Bold = Adevărat
.Font.Size = 14
.Offset (1,0). Selectați
Se termina cu

r = 3

Setați wrdApp = CreateObject („Word.Application”)
wrdApp.Visible = Adevărat
Setați wrdDoc = wrdApp.Documents.Open („B: \ Test \ MyNewWordDoc.docx”)

Cu wrdDoc
Pentru p = 1 la .Paragrafe.Cont
Set trange = .Range (Start: =. Paragrafele (p) .Range.Start, _
Sfârșit: =. Paragrafele (p) .Range.End)
tString = trange.Text
tString = Stânga (tString, Len (tString) -1)

Dacă Instr (1, tString, ”1”)> 0 Atunci
wb.Foarte de lucru (1) .Range („A” & r) .Value = tString
r = r + 1
End If

Următorul p
.Închide

Se termina cu

wrdApp.Quit
Set wrdDoc = Nimic
Set wrdApp = Nimic
wb.Saved = Adevărat

Sfârșitul Sub

Pentru a copia codul de mai sus în fișierul dvs.,

  • Apăsați Alt + F11 pe tastatură
  • În partea stângă, veți vedea Microsoft Excel Objects
  • Faceți clic dreapta și selectați Inserați
  • Apoi faceți clic pe Modul
  • Copiați codul în fereastra de cod din dreapta

Acum să vedem cum funcționează acest cod -

Mai întâi declarăm variabilele de care avem nevoie -tstring ca un șir pentru a ține textul (vom vedea ce text mai târziu). 2 variabile „p” și „r” ca contoare. Acestea sunt de tip „lung”. Apoi avem cele 2 variabile de obiect wrdApp și wrdDoc. wrdApp este cuvântul obiect aplicație și wrdDoc este obiectul document Word. Wb este variabila noastră de registru de lucru pentru noul registru de lucru care este creat în cod. Dacă deschideți un registru de lucru existent, îi puteți atribui această variabilă. Ultima variabilă este varianta trange de tip variabilă care va avea conținutul care trebuie transferat din cuvântul doc în fișierul excel.

Setați wb = Workbooks.Add

Aceasta atribuie noului registru de lucru variabilei wb. Dacă nu doriți să adăugați un registru de lucru nou, dar să deschideți un registru de lucru existent, atunci puteți modifica această linie după cum urmează -
Setați wb - Workbooks.Open („B: \ Test \ File1.xlsx”)

Cu wb.Whehsheets (1) .Gama („A1”)
.Value = „Conținutul documentului Word:”
.Font.Bold = Adevărat
.Font.Size = 14
.Offset (1,0). Selectați
Se termina cu

Gama With wb.Worksheets (1). („A1”) este o modalitate rapidă de referențiere la acesta. Deci nu trebuie să o repetați pentru fiecare dintre liniile de cod dintre instrucțiunile With și End cu.

Aceste linii de cod plasate în textul „Conținutul documentului Word:” cu un font îngroșat și dimensiunea fontului 14 în celula A1 a 1Sf foaie de lucru în noul registru de lucru. Și apoi .Offset (1,0). Selectați selectează următorul rând.

r = 3

Variabilei „r” i se atribuie o valoare 3 deoarece acesta este rândul de pornire din fișierul Excel pentru datele care trebuie copiate din documentul Word.

Setați wrdApp = CreateObject („Word.Application”)

Dacă Word rulează deja în sistemul dvs.,CreateObjectva crea o nouă instanță de Word. Deci, această linie atribuie variabila obiect wrdApp aplicației Word pe care o puteți utiliza mai târziu în cod.

wrdApp.Visible = Adevărat

Instanța Word recent creată nu va fi vizibilă atunci când este creată. Pentru a-l face vizibil, trebuie să setați wrdApp.Visible = True astfel încât să fie vizibil.

Setați wrdDoc = wrdApp.Documents.Open ("B: \ Test \ MyNewWordDoc.docx")

Am creat noua instanță a cuvântului aplicație, dar nu am deschis încă un document Word sursă. Deci, această comandă va deschide documentul Word. Obiectul wrdDoc a fost atribuit acestui document, astfel încât să îl putem folosi mai târziu în cod.

Cu wrdDoc… .Încheiere cu

Aceasta este bucla noastră „With” care va funcționa în întregime cu obiectul wrdDoc. Odată ce ați deschis această buclă, nu trebuie să repetați din nou textul „wrdDoc” în această buclă. Puteți începe direct cu punctul („.”) Înainte de orice obiecte legate de wrdDoc. Această buclă se termină cu Se termina cu afirmație. Odată ce a fost introdusă instrucțiunea End With, nu puteți face referire la obiecte după wrdDoc doar cu „.”.

Pentru p = 1 la .Paragrafe.Cont

Aceasta este bucla „Pentru” care se va bucla de la 1Sf la ultimele paragrafe din documentul word. Fișierul cuvânt care conține datele conține 100 de linii de informații, fiecare stocat ca un paragraf separat. Bucla va crește de la 1 la 100 și va copia paragrafele. Dacă sunt stabilite anumite condiții, lipirea copierii se va baza pe aceste condiții.

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

Aceasta atribuie începutul și sfârșitul fiecărui paragraf pentru a varia ca creșterea buclei.

tString = trange.text
tString = Stânga (tString, len (tString) -1)

Mai întâi, textul din trange este transmis TString. Apoi, fiecare paragraf are un caracter de paragraf la sfârșitul propoziției. Aceasta este eliminată folosind funcția Stânga. Din partea stângă, toate caracterele, cu excepția ultimului, sunt stocate în variabila tString.

Dacă Instr (1, tString, „1”)> 0 Atunci
wb.Foarte de lucru (1) .Range („A” & r) .Value = tString
r = r + 1
End If

Această funcție IF verifică dacă textul din tString conține numărul 1. Dacă este adevărat, atunci copiază conținutul tString în următorul rând disponibil din registrul de lucru. „R” a avut mai întâi o valoare de 3. Folosind r = r + 1, îl incrementăm cu 1, astfel încât următoarea intrare să poată fi plasată sub intrarea anterioară.

Următorul p
.Închide

The Următorul p linie de incremente de cod la paragraful următor.

.Închide închide documentul după ce au fost lucrate toate paragrafele. Aceasta este rezultatul obținut în fișierul Excel -

Veți vedea că numai acele paragrafe care conțin numărul 1 oriunde în număr sunt incluse în ieșire.

wrdApp.Quit
Set wrdDoc = Nimic
Set wrdApp = Nimic
wb.Saved = Adevărat

wrdApp.Quit va închide cuvântul Aplicație. Set wrdDoc = Nothing și Set wrdApp = Nothing va elibera memoria luată de aceste 2 variabile de obiect și le va seta la Nothing. wb.Saved = True va salva registrul de lucru.

Cu codul de mai sus putem controla ce date trebuie copiate din fișierul Word în fișierul Excel.