Styr Excel fra Word ved hjælp af VBA i Microsoft Excel 2010

Anonim

Der er tidspunkter, hvor vi skal kopiere data fra et word -dokument til en excel -fil. Vi kan meget let gøre dette med en makro i alle versioner af kontoret. Makroen åbner en eksisterende / ny excel -fil, kopierer indholdet og gemmer og lukker derefter filen. Lad os se, hvordan dette gøres.

Mulighed eksplicit


Sub OpenAndReadWordDoc ()
Dim tString som streng
Dim p Så længe, ​​r Så længe
Dim wrdApp som objekt, wrdDoc som objekt
Dim wb Som projektmappe
Dim trange Som variant

Indstil wb = Workbooks.Add
Med wb.Worksheets (1) .Range ("A1")
.Value = "Indhold i Word -dokument:"
.Font.Bold = Sandt
.Font.Size = 14
.Offset (1,0) .Vælg
Afslut med

r = 3

Indstil wrdApp = CreateObject (“Word.Application”)
wrdApp.Visible = Sandt
Indstil wrdDoc = wrdApp.Documents.Open (“B: \ Test \ MyNewWordDoc.docx”)

Med wrdDoc
For p = 1 til .Paragraphs.Count
Indstil trange = .Range (Start: =. Afsnit (p) .Range.Start, _
Slut: =. Afsnit (p) .Range.End)
tString = trange.Text
tString = Venstre (tString, Len (tString) -1)

Hvis Instr (1, tString, ”1”)> 0 Derefter
wb.Worksheets (1) .Range (“A” & r) .Value = tString
r = r+1
Afslut Hvis

Næste s
.Tæt

Afslut med

wrdApp.Afslut
Indstil wrdDoc = Intet
Indstil wrdApp = Intet
wb.Saved = Sandt

Afslut Sub

For at kopiere ovenstående kode til din fil,

  • Tryk på Alt + F11 på tastaturet
  • På venstre side ser du Microsoft Excel -objekter
  • Højreklik og vælg Indsæt
  • Klik derefter på modul
  • Kopier koden til kodevinduet til højre

Lad os nu se, hvordan denne kode fungerer -

Først deklarerer vi de variabler, vi har brug for -tstring som en streng for at holde tekst (vi får se hvilken tekst senere). 2 variabler “p” & “r” som tællere. Disse er af den "lange" type. Så har vi de 2 objektvariabler wrdApp og wrdDoc. wrdApp er ordet applikationsobjekt, og wrdDoc er Word -dokumentobjektet. Wb er vores projektmappevariabel for den nye projektmappe, som er oprettet i koden. Hvis du åbner en eksisterende projektmappe, kan du i stedet tildele denne variabel til den. Den sidste variabel er variabeltypen variabel, der har det indhold, der skal overføres fra word doc til excel -filen.

Indstil wb = Workbooks.Add

Dette tildeler den nye projektmappe til wb -variablen. Hvis du ikke vil tilføje en ny projektmappe, men åbner en eksisterende projektmappe, kan du ændre denne linje som følger -
Indstil wb - Workbooks.Open (“B: \ Test \ File1.xlsx”)

Med wb.Worksheets (1) .Range ("A1")
.Value = "Indhold i Word -dokument:"
.Font.Bold = Sandt
.Font.Size = 14
.Offset (1,0) .Vælg
Afslut med

With wb.Worksheets (1) .range ("A1") er en hurtig måde at henvise til det. Så du behøver ikke at gentage det for hver af kodelinjerne mellem med og slut med sætninger.

Disse kodelinjer indsættes i teksten "Word Document Contents:" med en fed skrift og skriftstørrelse 14 i celle A1 i 1st regneark i den nye projektmappe. Og derefter .Offset (1,0) .Vælg vælger den næste række.

r = 3

Variablen "r" er tildelt en værdi 3, da dette er startrækken i excel -filen for de data, der skal kopieres fra word -dokumentet.

Indstil wrdApp = CreateObject (“Word.Application”)

Hvis Word allerede kører i dit system,CreateObjectvil oprette en ny forekomst af Word. Så denne linje tildeler objektvariablen wrdApp til Word -applikationen, som du kan bruge senere i koden.

wrdApp.Visible = Sandt

Den nyoprettede forekomst af Word vil ikke være synlig, når den oprettes. For at gøre det synligt skal du indstille wrdApp.Visible = True, så det er synligt.

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

Vi oprettede den nye forekomst af ordprogrammet, men vi har endnu ikke åbnet et kildeord -dokument. Så denne kommando åbner word -dokumentet. Objektet wrdDoc er blevet tildelt dette dokument, så vi kan bruge det senere i koden.

Med wrdDoc… .Slut med

Dette er vores “With” loop, der udelukkende fungerer med wrdDoc -objektet. Når du har åbnet denne loop, behøver du ikke at gentage teksten “wrdDoc” igen i denne loop. Du kan starte direkte med prikken (“.”) Før objekter, der vedrører wrdDoc. Denne sløjfe slutter med Afslut med udmelding. Når Slut med -sætningen er blevet indtastet, kan du ikke referere til objekterne efter wrdDoc med bare “.”.

For p = 1 til .Paragraphs.Count

Dette er "For" -sløjfen, der løber fra 1st til sidste afsnit i word -dokumentet. Ordfilen, der indeholder dataene, har 100 linjer med oplysninger, der hver er gemt som et separat afsnit. Sløjfen øges fra 1 til 100 og kopierer afsnittene. Hvis visse betingelser er angivet, er kopipastaen baseret på disse betingelser.

Indstil trange = .Range (Start: =. Afsnit (p) .Range.Start, End: =. Afsnit (p) .Range.End)

Dette tildeler starten og slutningen af ​​hvert afsnit til at variere i takt med sløjfen.

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

Først sendes teksten fra trange videre til TString. Derefter har hvert afsnit et afsnitstegn i slutningen af ​​sætningen. Dette fjernes ved hjælp af funktionen Venstre. Fra venstre side gemmes alle tegn undtagen den sidste i tString -variablen.

Hvis Instr (1, tString, “1”)> 0 Derefter
wb.Worksheets (1) .Range (“A” & r) .Value = tString
r = r+1
Afslut Hvis

Denne IF -funktion kontrollerer, om teksten i tString indeholder tallet 1. Hvis det er sandt, kopierer det indholdet af tString til den næste tilgængelige række i projektmappen. “R” havde først en værdi på 3. Ved brug af r = r+1 øger vi det med 1, så den næste post kan placeres under den forrige post.

Næste s
.Tæt

Det Næste s linje med kodeforøgelser til næste afsnit.

.Tæt lukker dokumentet, når alle afsnit er blevet bearbejdet. Dette er det output, vi får i excel -filen -

Du vil se, at kun de afsnit, der indeholder nummer 1 hvor som helst i tallet, er inkluderet i output.

wrdApp.Afslut
Indstil wrdDoc = Intet
Indstil wrdApp = Intet
wb.Saved = Sandt

wrdApp.Quit lukker ordet Application. Set wrdDoc = Nothing og Set wrdApp = Intet frigiver hukommelsen fra disse 2 objektvariabler og sætter dem til Nothing. wb.Saved = True gemmer projektmappen.

Med ovenstående kode kan vi kontrollere, hvilke data der skal kopieres fra word -fil til excel -fil.