Kontroller Excel fra Word ved hjelp av VBA i Microsoft Excel 2010

Anonim

Det er tider vi må kopiere data fra et word -dokument til en excel -fil. Vi kan gjøre dette veldig enkelt med en makro i alle versjoner av kontoret. Makroen vil åpne en eksisterende / ny excel -fil, kopiere innholdet og deretter lagre og lukke filen. La oss se hvordan dette gjøres.

Alternativ Eksplisitt


Sub OpenAndReadWordDoc ()
Dim tString som streng
Dim p Så lenge, r Så lenge
Dim wrdApp As Object, wrdDoc As Object
Dim wb Som arbeidsbok
Dim trange Som variant

Sett wb = Workbooks.Add
Med wb.Worksheets (1) .Range ("A1")
.Value = "Innhold i Word -dokument:"
.Font.Bold = Sant
.Font.Size = 14
.Offset (1,0) .Velg
Slutt med

r = 3

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

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

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

Neste s
.Lukk

Slutt med

wrdApp.Slutt
Sett wrdDoc = Ingenting
Sett wrdApp = Ingenting
wb.Saved = True

Slutt Sub

For å kopiere koden ovenfor til filen din,

  • Trykk Alt + F11 på tastaturet
  • På venstre side vil du se Microsoft Excel -objekter
  • Høyreklikk og velg Sett inn
  • Klikk deretter på Modul
  • Kopier koden til kodevinduet til høyre

La oss nå se hvordan denne koden fungerer -

Først deklarerer vi variablene vi trenger -string som en streng for å holde tekst (vi får se hvilken tekst senere). 2 variabler “p” og “r” som tellere. Disse er av den "lange" typen. Så har vi de 2 objektvariablene wrdApp og wrdDoc. wrdApp er ordet applikasjonsobjekt og wrdDoc er Word -dokumentobjektet. Wb er vår arbeidsbokvariabel for den nye arbeidsboken som er opprettet i koden. Hvis du åpner en eksisterende arbeidsbok, kan du tilordne denne variabelen til den i stedet. Den siste variabelen er varianten variabeltype som vil ha innholdet som må overføres fra ordet doc til excel -filen.

Sett wb = Workbooks.Add

Dette tilordner den nye arbeidsboken til wb -variabelen. Hvis du ikke vil legge til en ny arbeidsbok, men åpne en eksisterende arbeidsbok, kan du endre denne linjen som følger -
Sett wb - Workbooks.Open ("B: \ Test \ File1.xlsx")

Med wb.Worksheets (1) .Range ("A1")
.Value = "Innhold i Word -dokument:"
.Font.Bold = Sant
.Font.Size = 14
.Offset (1,0) .Velg
Slutt med

With wb.Worksheets (1) .range ("A1") er en rask måte å referere til det. Så du trenger ikke å gjenta det for hver av kodelinjene mellom Med og Slutt med setninger.

Disse kodelinjene er satt inn i teksten "Word Document Contents:" med fet skrift og skriftstørrelse 14 i celle A1 i 1st regneark i den nye arbeidsboken. Og så .Offset (1,0) .Velg velger neste rad.

r = 3

Variabelen "r" er tildelt en verdi 3 ettersom dette er startraden i excel -filen for dataene som skal kopieres fra word -dokumentet.

Sett wrdApp = CreateObject ("Word.Application")

Hvis Word allerede kjører i systemet ditt,CreateObjectvil opprette en ny forekomst av Word. Så denne linjen tildeler objektvariabelen wrdApp til Word -applikasjonen som du kan bruke senere i koden.

wrdApp.Visible = True

Den nyopprettede forekomsten av Word vil ikke være synlig når den opprettes. For å gjøre den synlig må du sette wrdApp.Visible = True slik at den er synlig.

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

Vi opprettet den nye forekomsten av ordprogrammet, men vi har ikke åpnet et kildeorddokument ennå. Så denne kommandoen vil åpne word -dokumentet. Objektet wrdDoc er tilordnet dette dokumentet, slik at vi kan bruke det senere i koden.

With wrdDoc… .End With

Dette er vår "With" -sløyfe som vil fungere helt med wrdDoc -objektet. Når du har åpnet denne løkken, trenger du ikke å gjenta teksten “wrdDoc” igjen i denne løkken. Du kan starte med prikken (“.”) Før noen objekter knyttet til wrdDoc. Denne løkken ender med Slutt med uttalelse. Når enden med setningen er lagt inn, kan du ikke referere til objektene etter wrdDoc med bare ".".

For p = 1 til .Paragraphs.Count

Dette er "For" -løkken som går fra 1st til siste avsnitt i word -dokumentet. Ordfilen som inneholder dataene har 100 linjer med informasjon, hver lagret som et eget avsnitt. Sløyfen vil øke fra 1 til 100 og kopiere avsnittene. Hvis visse betingelser er angitt, vil kopieringslimen være basert på disse betingelsene.

Sett trange = .Range (Start: =. Avsnitt (p) .Range.Start, End: =. Avsnitt (p) .Range.End)

Dette tildeler begynnelsen og slutten av hvert avsnitt til å omfatte løkkestigningene.

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

Først sendes teksten fra trange videre til TString. Deretter har hvert avsnitt et avsnittstegn på slutten av setningen. Dette fjernes ved å bruke funksjonen Venstre. Fra venstre side er alle tegn bortsett fra den siste lagret i tString -variabelen.

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

Denne IF -funksjonen sjekker om teksten i tString inneholder tallet 1. Hvis det er sant, kopierer det innholdet i tString til neste tilgjengelige rad i arbeidsboken. “R” hadde først en verdi på 3. Ved å bruke r = r+1, øker vi den med 1, slik at neste oppføring kan plasseres under den forrige oppføringen.

Neste s
.Lukk

De Neste s linje med kodeøkninger til neste avsnitt.

.Lukk lukker dokumentet når alle avsnittene er bearbeidet. Dette er utgangen vi får i excel -filen -

Du vil se at bare de avsnittene som inneholder nummer 1 hvor som helst i tallet er inkludert i utdataene.

wrdApp.Slutt
Sett wrdDoc = Ingenting
Sett wrdApp = Ingenting
wb.Saved = True

wrdApp.Quit vil lukke ordet Application. Set wrdDoc = Nothing og Set wrdApp = Nothing vil frigjøre minnet fra disse 2 objektvariablene og sette dem til Nothing. wb.Saved = True lagrer arbeidsboken.

Med koden ovenfor kan vi kontrollere hvilke data som skal kopieres fra word -fil til excel -fil.