Excel till Word-makro - Excel-tips

Innehållsförteckning

Tack till Jake som lämnade veckans Excel-fråga:

Hur kan jag skriva ett makro som tar Excel-kalkylbladsdata och skapar en Word-fil för varje datarad?

Jake - vilken bra idé! Jag har ofta försäljningsresultat för hela företaget och det skulle vara jättebra att kunna skicka varje rep bara hans eller hennes information i Word. Du kan göra detta från Word med Mail Merge, men att kontrollera Word från Excel är ett intressant perspektiv. Exemplet nedan är ganska enkelt, men man skulle kunna bygga på detta koncept för att göra ganska avancerade applikationer.

Låt oss först ta en titt på ett exempel på en datauppsättning. Jag skapade en arbetsbok med två ark - en som heter Data och en som heter Template. Data-kalkylbladet har många rader med data. Mallkalkylbladet har strukturen i Word-dokumentet som jag vill skapa. I det här fallet vill jag kopiera namnet från kolumn A i databasen till cell C4 på mallen. Kolumner B: E i databasen går i cellerna C10: C13.

Låt oss först ta en titt på ett exempel på en datauppsättning. Jag skapade en arbetsbok med två ark - en som heter Data och en som heter Template. Data-kalkylbladet har många rader med data. Mallkalkylbladet har strukturen i Word-dokumentet som jag vill skapa. I det här fallet vill jag kopiera namnet från kolumn A i databasen till cell C4 på mallen. Kolumner B: E i databasen går i cellerna C10: C13.

Databladet
Mallbladet

Starta VB Editor med alt-F11. Eftersom vi vill utfärda Word-kommandon här, gå till Verktyg> Referenser. Rulla ner för att hitta "Microsoft Word 8" och markera rutan bredvid det här objektet.

För att styra Word från Excel måste du definiera en variabel som representerar Word-applikationen. I exemplet nedan använde jag appWD. För alla kommandon i Excel-makroen som du vill använda i Word-applikationen, prefixar du bara kommandot med appWD. Eftersom jag aldrig har skrivit en rad med Word Macro-kod tidigare gick jag till Word, spelade in handlingarna och kopierade sedan koden till Excel och lade till prefixet före varje rad.

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

Efter att ha kört detta makro kommer du att ha en ny Word-fil för varje datarad på ditt datablad.

Tack än en gång till Jake för den här fantastiska frågan. Det finns många applikationer där styrning av Word inifrån Excel kan ge en kraftfull lösning.

Intressanta artiklar...