Makro Excel - Word - Tipy pro Excel

Obsah

Děkuji Jakeovi, který tento týden poskytl excelovou otázku:

Jak mohu napsat makro, které vezme data tabulky aplikace Excel a vytvoří soubor Word pro každý řádek dat?

Jake - skvělý nápad! Často mám prodejní výsledky pro celou společnost a bylo by skvělé, kdybych mohl každému zástupci posílat pouze jeho informace ve Wordu. Dalo by se to udělat z Wordu pomocí hromadné korespondence, ale ovládání Wordu z Excelu je zajímavá vyhlídka. Níže uvedený příklad je poměrně přímočarý, ale člověk by byl schopen stavět na tomto konceptu a dělat docela pokročilé aplikace.

Nejprve se podívejme na ukázkovou sadu dat. Vytvořil jsem sešit se dvěma listy - jeden s názvem Data a druhý s názvem Šablona. Pracovní list Data obsahuje mnoho řádků dat. List Šablona má strukturu dokumentu Word, který chci vytvořit. V tomto případě budu chtít zkopírovat název ze sloupce A databáze do buňky C4 na šabloně. Sloupce B: E databáze přejdou do buněk C10: C13.

Nejprve se podívejme na ukázkovou sadu dat. Vytvořil jsem sešit se dvěma listy - jeden s názvem Data a druhý s názvem Šablona. Pracovní list Data obsahuje mnoho řádků dat. List Šablona má strukturu dokumentu Word, který chci vytvořit. V tomto případě budu chtít zkopírovat název ze sloupce A databáze do buňky C4 na šabloně. Sloupce B: E databáze přejdou do buněk C10: C13.

Datový list
Šablona

Spusťte VB Editor s alt-F11. Protože zde chceme vydávat příkazy Wordu, přejděte na Nástroje> Odkazy. Přejděte dolů a vyhledejte „Microsoft Word 8“ a zaškrtnutím políčka vedle vyberte tuto položku.

Chcete-li ovládat Word z Excelu, musíte definovat proměnnou, která bude reprezentovat aplikaci Word. V níže uvedeném příkladu jsem použil appWD. U všech příkazů v makru aplikace Excel, které chcete použít pro aplikaci Word, jednoduše předponu před příkazem appWD. Ve skutečnosti, protože jsem nikdy předtím nenapsal řádek kódu Word Word, šel jsem do Wordu, zaznamenal akce a poté zkopíroval tento kód do aplikace Excel a před každý řádek přidal předponu.

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

Po spuštění tohoto makra budete mít jeden nový soubor Word pro každý řádek dat v datovém listu.

Ještě jednou děkuji Jakeovi za tuto skvělou otázku. Existuje mnoho aplikací, kde ovládání Wordu z aplikace Excel může poskytnout výkonné řešení.

Zajímavé články...