Макрос Excel в Word - Советы по Excel

Содержание

Спасибо Джейку, который задал на этой неделе вопрос по Excel:

Как я могу написать макрос, который будет использовать данные электронной таблицы Excel и создавать файл Word для каждой строки данных?

Джейк - какая отличная идея! У меня часто есть результаты продаж для всей компании, и было бы здорово иметь возможность отправлять каждому представителю только его или ее информацию в Word. Вы можете сделать это из Word с помощью Mail Merge, но управление Word из Excel - интересная перспектива. Приведенный ниже пример довольно прост, но на основе этой концепции можно было бы создавать довольно сложные приложения.

Во-первых, давайте взглянем на образец набора данных. Я создал книгу с двумя листами - один с названием «Данные», а другой с именем «Шаблон». На листе данных много строк данных. Рабочий лист шаблона имеет структуру документа Word, который я хочу создать. В этом случае я хочу скопировать имя из столбца A базы данных в ячейку C4 в шаблоне. Столбцы B: E базы данных войдут в ячейки C10: C13.

Во-первых, давайте взглянем на образец набора данных. Я создал книгу с двумя листами - один с названием «Данные», а другой с именем «Шаблон». На листе данных много строк данных. Рабочий лист шаблона имеет структуру документа Word, который я хочу создать. В этом случае я хочу скопировать имя из столбца A базы данных в ячейку C4 в шаблоне. Столбцы B: E базы данных войдут в ячейки C10: C13.

Лист данных
Лист шаблона

Запустите редактор VB с помощью alt-F11. Поскольку здесь мы хотим использовать команды Word, перейдите в Инструменты> Ссылки. Прокрутите вниз, найдите «Microsoft Word 8» и установите флажок рядом с этим элементом.

Чтобы управлять Word из Excel, вам необходимо определить переменную для представления приложения Word. В приведенном ниже примере я использовал appWD. Для любых команд в макросе Excel, которые вы хотите применить к приложению Word, вы просто добавляете к команде префикс appWD. Фактически, поскольку я никогда раньше не писал ни строчки макрокода Word, я перешел в 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 может стать мощным решением.

Интересные статьи...