Excel til Word-makro - Excel-tips

Innholdsfortegnelse

Takk til Jake som ga denne ukens Excel-spørsmål:

Hvordan kan jeg skrive en makro som tar Excel-regnearkdata og oppretter en Word-fil for hver datarad?

Jake - for en god idé! Jeg har ofte salgsresultater for hele selskapet, og det ville være flott å kunne sende hver representant bare hans eller hennes informasjon i Word. Du kan gjøre dette fra Word ved hjelp av Mail Merge, men å kontrollere Word fra Excel er et interessant prospekt. Eksemplet nedenfor er ganske greit, men man vil kunne bygge videre på dette konseptet for å gjøre ganske avanserte applikasjoner.

La oss først se på et eksempeldatasett. Jeg opprettet en arbeidsbok med to ark - en som heter Data og en som heter Mal. Data-regnearket har mange rader med data. Malarket har strukturen til Word-dokumentet som jeg vil lage. I dette tilfellet vil jeg kopiere navnet fra kolonne A i databasen til celle C4 på malen. Kolonne B: E i databasen vil gå i celler C10: C13.

La oss først se på et eksempeldatasett. Jeg opprettet en arbeidsbok med to ark - en som heter Data og en som heter Mal. Data-regnearket har mange rader med data. Malarket har strukturen til Word-dokumentet som jeg vil lage. I dette tilfellet vil jeg kopiere navnet fra kolonne A i databasen til celle C4 på malen. Kolonne B: E i databasen vil gå i celler C10: C13.

Dataarket
Malarket

Start VB Editor med alt-F11. Siden vi ønsker å utstede Word-kommandoer her, gå til Verktøy> Referanser. Bla ned for å finne "Microsoft Word 8" og merk av i boksen ved siden av å velge dette elementet.

For å kontrollere Word fra Excel, må du definere en variabel som skal representere Word-applikasjonen. I eksemplet nedenfor brukte jeg appWD. For alle kommandoer i Excel-makroen som du vil bruke til Word-applikasjonen, prefikser du bare kommandoen med appWD. Faktisk, siden jeg aldri har skrevet en linje med Word Macro-kode før, gikk jeg til Word, registrerte handlingene og kopierte koden til Excel, og la til prefikset før hver linje.

Sub ControlWord() ' You must pick Microsoft Word 8.0 from Tools>References ' in the VB editor to execute Word commands. ' See VB Help topic "Controlling One Microsoft Office Application from Another" ' for more information. ' Originally published by www.MrExcel.com 2/28/1999 Dim appWD As Word.Application ' Create a new instance of Word & make it visible Set appWD = CreateObject("Word.Application.8") appWD.Visible = True Sheets("Data").Select 'Find the last row with data in the database FinalRow = Range("A9999").End(xlUp).Row For i = 2 To FinalRow Sheets("Data").Select ' Copy the name to cell C4 Range("A" & i).Copy Destination:=Sheets("Template").Range("C4") ' Copy data columns, transpose and paste in C10:C13 Range("B" & i & ":E" & i).Copy Sheets("Template").Select Range("C10").PasteSpecial Transpose:=True ' Copy the data for the new document to the clipboard Range("A1:F15").Copy ' Tell Word to create a new document appWD.Documents.Add ' Tell Word to paste the contents of the clipboard into the new document appWD.Selection.Paste ' Save the new document with a sequential file name appWD.ActiveDocument.SaveAs FileName:="File" & i ' Close this new word document appWD.ActiveDocument.Close Next i ' Close the Word application appWD.Quit End Sub

Etter å ha kjørt denne makroen, vil du ha en ny Word-fil for hver rad med data på databladet ditt.

Takk igjen til Jake for dette flotte spørsmålet. Det er mange applikasjoner der kontroll av Word fra innsiden av Excel kan gi en kraftig løsning.

Interessante artikler...