Excel To Word Macro - Съвети за Excel

Съдържание

Благодаря на Джейк, който предостави въпроса за Excel тази седмица:

Как мога да напиша макрос, който ще вземе данни от електронна таблица на Excel и ще създаде файл на Word за всеки ред данни?

Джейк - каква страхотна идея! Често имам резултати от продажби за цялата компания и би било чудесно да мога да изпращам на всеки представител само неговата или нейната информация в Word. Можете да направите това от Word чрез Mail Merge, но контролирането на Word от Excel е интересна перспектива. Примерът по-долу е доста ясен, но човек би могъл да надгражда тази концепция, за да прави доста усъвършенствани приложения.

Първо, нека да разгледаме примерен набор от данни. Създадох работна книга с два листа - един, наречен Data, и един, наречен Template. Работният лист за данни има много редове данни. Работният лист на шаблона има структурата на Word документа, който искам да създам. В този случай ще искам да копирам името от колона А на базата данни в клетка С4 на шаблона. Колони B: E на базата данни ще отидат в клетки C10: C13.

Първо, нека да разгледаме примерен набор от данни. Създадох работна книга с два листа - един, наречен Data, и един, наречен Template. Работният лист за данни има много редове данни. Работният лист на шаблона има структурата на Word документа, който искам да създам. В този случай ще искам да копирам името от колона А на базата данни в клетка С4 на шаблона. Колони B: E на базата данни ще отидат в клетки C10: C13.

Лист с данни
Шаблонен лист

Стартирайте VB редактора с alt-F11. Тъй като искаме да издаваме команди на Word тук, отидете на Инструменти> Референции. Превъртете надолу, за да намерите „Microsoft Word 8“ и поставете отметка в квадратчето до, за да изберете този елемент.

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

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