Макрос Excel - Word - Поради Excel

Зміст

Дякую Джейку, який надав запитання Excel цього тижня:

Як я можу написати макрос, який буде приймати дані електронної таблиці Excel і створювати файл Word для кожного рядка даних?

Джейк - яка чудова ідея! Я часто маю результати продажів для всієї компанії, і було б чудово мати можливість надіслати кожному представнику лише свою інформацію у програмі Word. Ви можете зробити це з Word за допомогою злиття, але керування Word з Excel - це цікава перспектива. Наведений нижче приклад досить простий, але можна було б спиратися на цю концепцію для використання досить просунутих програм.

Спочатку давайте розглянемо зразок набору даних. Я створив книгу з двома аркушами - один, який називається Дані, а другий Шаблон. На аркуші даних є багато рядків даних. Аркуш шаблону має структуру документа Word, який я хочу створити. У цьому випадку я хочу скопіювати ім'я зі стовпця А бази даних у комірку С4 на шаблоні. Стовпці B: E бази даних потраплять у комірки C10: C13.

Спочатку давайте розглянемо зразок набору даних. Я створив книгу з двома аркушами - один, який називається Дані, а другий Шаблон. На аркуші даних є багато рядків даних. Аркуш шаблону має структуру документа Word, який я хочу створити. У цьому випадку я хочу скопіювати ім'я зі стовпця А бази даних у комірку С4 на шаблоні. Стовпці B: E бази даних потраплять у комірки C10: C13.

Таблиця даних
Аркуш шаблонів

Запустіть редактор VB за допомогою alt-F11. Оскільки ми хочемо видавати тут команди Word, перейдіть до Інструменти> Посилання. Прокрутіть униз, щоб знайти "Microsoft Word 8", і поставте прапорець, щоб вибрати цей елемент.

Щоб керувати Word з Excel, потрібно визначити змінну, яка представлятиме програму Word. У наведеному нижче прикладі я використовував appWD. Для будь-яких команд у макросі Excel, які ви хочете застосувати до програми Word, ви просто додаєте команді префікс до appWD. Насправді, оскільки я ніколи раніше не писав рядок коду Word Macro, я перейшов до Word, записав дії, а потім скопіював цей код в Excel, додавши префікс перед кожним рядком.

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

Після запуску цього макросу у вас буде один новий файл Word для кожного рядка даних у вашому аркуші даних.

Ще раз спасибі Джейку за це чудове запитання. Є багато програм, де керування Word зсередини Excel може забезпечити потужне рішення.

Цікаві статті...