Styr Excel från Word med VBA i Microsoft Excel 2010

Anonim

Ibland måste vi kopiera data från ett word -dokument till en excel -fil. Vi kan göra detta mycket enkelt med ett makro i alla versioner av kontoret. Makrot öppnar en befintlig / ny excel -fil, kopierar innehållet och sparar och stänger sedan filen. Får se hur detta görs.

Alternativ Explicit


Sub OpenAndReadWordDoc ()
Dim tString som sträng
Dim p Så länge, r Så länge
Dim wrdApp som objekt, wrdDoc som objekt
Dim wb Som arbetsbok
Dim trange Som variant

Ange wb = Workbooks.Add
Med wb.Worksheets (1) .Range (“A1”)
.Value = “Innehåll i Word -dokument:”
.Font.Bold = Sant
.Font.Size = 14
.Offset (1,0) .Välj
Sluta med

r = 3

Ange wrdApp = CreateObject (“Word.Application”)
wrdApp.Visible = Sant
Ställ in wrdDoc = wrdApp.Documents.Open (“B: \ Test \ MyNewWordDoc.docx”)

Med wrdDoc
För p = 1 till .Paragraphs.Count
Ställ in trange = .Range (Start: =. Paragrafer (p) .Range.Start, _
Slut: =. Stycken (p) .Range.End)
tString = trange.Text
tString = Vänster (tString, Len (tString) -1)

Om Instr (1, tString, ”1”)> 0 Sedan
wb.Worksheets (1) .Range (“A” & r) .Value = tString
r = r+1
Avsluta om

Nästa s
.Stänga

Sluta med

wrdApp.Avsluta
Ange wrdDoc = Ingenting
Ange wrdApp = Ingenting
wb.Saved = Sant

Avsluta Sub

För att kopiera ovanstående kod till din fil,

  • Tryck på Alt + F11 på tangentbordet
  • På vänster sida ser du Microsoft Excel -objekt
  • Högerklicka och välj Infoga
  • Klicka sedan på Modul
  • Kopiera koden till kodfönstret till höger

Nu får vi se hur den här koden fungerar -

Först deklarerar vi variablerna vi behöver -tstring som en sträng för att hålla text (vi får se vilken text senare). 2 variabler “p” & “r” som räknare. Dessa är av den "långa" typen. Sedan har vi de två objektvariablerna wrdApp och wrdDoc. wrdApp är ordet applikationsobjekt och wrdDoc är Word -dokumentobjektet. Wb är vår arbetsbokvariabel för den nya arbetsboken som skapas i koden. Om du öppnar en befintlig arbetsbok kan du tilldela den här variabeln istället. Den sista variabeln är variabeln variabel som har det innehåll som måste överföras från ordet doc till excel -filen.

Ange wb = Workbooks.Add

Detta tilldelar den nya arbetsboken till variabeln wb. Om du inte vill lägga till en ny arbetsbok utan öppna en befintlig arbetsbok kan du ändra den här raden enligt följande -
Ställ in wb - Workbooks.Open (“B: \ Test \ File1.xlsx”)

Med wb.Worksheets (1) .Range (“A1”)
.Value = “Innehåll i Word -dokument:”
.Font.Bold = Sant
.Font.Size = 14
.Offset (1,0) .Välj
Sluta med

With wb.Worksheets (1) .range (“A1”) är ett snabbt sätt att referera till det. Så du behöver inte upprepa det för var och en av kodraderna mellan With och End with statements.

Dessa kodrader finns i texten "Word Document Innehåll:" med fetstil och teckenstorlek 14 i cell A1 i 1st arbetsblad i den nya arbetsboken. Och sedan .Offset (1,0) .Välj väljer nästa rad.

r = 3

Variabeln "r" tilldelas ett värde 3 eftersom detta är startraden i excel -filen för data som ska kopieras från word -dokumentet.

Ange wrdApp = CreateObject (“Word.Application”)

Om Word redan körs i ditt system,CreateObjectkommer att skapa en ny instans av Word. Så den här raden tilldelar objektvariabeln wrdApp till Word -applikationen som du kan använda senare i koden.

wrdApp.Visible = Sant

Den nyskapade instansen av Word kommer inte att synas när den skapas. För att göra det synligt måste du ställa in wrdApp.Visible = True så att det är synligt.

Ställ in wrdDoc = wrdApp.Documents.Open ("B: \ Test \ MyNewWordDoc.docx")

Vi skapade den nya förekomsten av ordprogrammet men vi har inte öppnat ett källord -dokument än. Så det här kommandot öppnar word -dokumentet. Objektet wrdDoc har tilldelats detta dokument så att vi kan använda det senare i koden.

Med wrdDoc… .End With

Detta är vår "With" -slinga som fungerar helt med wrdDoc -objektet. När du har öppnat den här slingan behöver du inte upprepa texten “wrdDoc” igen i den här slingan. Du kan börja direkt med punkten (“.”) Före objekt som rör wrdDoc. Denna slinga slutar med Sluta med påstående. När Slut med -satsen har matats in kan du inte hänvisa till objekten efter wrdDoc med bara ".".

För p = 1 till .Paragraphs.Count

Detta är "For" -slingan som går från 1: anst till sista styckena i word -dokumentet. Ordfilen som innehåller data har 100 rader information, var och en lagrad som ett separat stycke. Slingan ökar från 1 till 100 och kopierar styckena. Om vissa villkor ställs ut baseras kopieringsklistret på dessa villkor.

Ställ in trange = .Range (Start: =. Paragrafer (p) .Range.Start, End: =. Paragrafer (p) .Range.End)

Detta tilldelar början och slutet av varje stycke till intervall som loop -steg.

tString = trange.text
tString = Vänster (tString, len (tString) -1)

Först skickas texten från trange vidare till TString. Sedan har varje stycke ett stycke i slutet av meningen. Detta tas bort med funktionen Vänster. Från vänster sida lagras alla tecken utom den sista i tString -variabeln.

Om Instr (1, tString, “1”)> 0 Sedan
wb.Worksheets (1) .Range (“A” & r) .Value = tString
r = r+1
Avsluta om

Denna IF -funktion kontrollerar om texten i tString innehåller siffran 1. Om den är sann kopierar den innehållet i tString till nästa tillgängliga rad i arbetsboken. “R” hade först värdet 3. Med r = r+1 ökar vi det med 1, så att nästa post kan placeras under föregående post.

Nästa s
.Stänga

De Nästa s kodrad ökar till nästa stycke.

.Stänga stänger dokumentet när alla stycken har bearbetats. Detta är utmatningen vi får i excel -filen -

Du kommer att se att endast de stycken som innehåller nummer 1 var som helst i numret ingår i utdata.

wrdApp.Avsluta
Ange wrdDoc = Ingenting
Ange wrdApp = Ingenting
wb.Saved = Sant

wrdApp.Quit stänger ordet Application. Set wrdDoc = Nothing och Set wrdApp = Nothing will release the memory taken by these 2 object variables and set them to Nothing. wb.Saved = True sparar arbetsboken.

Med ovanstående kod kan vi styra vilken data som ska kopieras från word -fil till excel -fil.