Как сделать слияние с Word документом

Что делает макрос: Одним из наиболее востребованных форм интеграции Word с почтой — это слияние. В большинстве случаев рассылки писем относятся к процессу создания одного письма или
документа, а затем его сочетание с отдельным документом, содержащим их имена и адреса.
Например, предположим, что у вас есть список клиентов, и вы хотите, составить письмо с каждым клиентом. При помощи слияния, вы можете написать письмо один раз, а затем запустить функцию слияния в Word, чтобы автоматически создалось письмо для каждого клиента, прикрепляя соответствующий адрес, имя и другую информацию для каждой буквы. Для автоматизации, вы можете использовать макрос для имитации функции почтового слияния из
Excel.

Как макрос работает

Идея относительно проста. Вы начинаете с шаблоном, который содержит закладки, идентифицирующие каждый элемент контактной информации. После того, как шаблон готов, идея состоит в том, чтобы просто перебрать каждого в списке контактов, выбирая
составные части их контактной информации в соответствующие закладки.
Одним из образцов является документ под названием MailMerge.docx. Это документ имеет все закладки, необходимые для запуска примеров кода, показанного здесь.
Обратите внимание, что вам нужно будет установить ссылку на библиотеку объектов Microsoft Word.

Код макроса

Sub SliyanieSWord()
'Шаг 1: Объявляем переменные
Dim wd As Word.Application
Dim wdDoc As Word.Document
Dim MyRange As Excel.Range
Dim MyCell As Excel.Range
Dim txtAddress As String
Dim txtCity As String
Dim txtState As String
Dim txtPostalCode As String
Dim txtFname As String
Dim txtFullname As String

'Шаг 2: Запустите Word и добавьте новый документ
Set wd = New Word.Application
Set wdDoc = wd.Documents.Add
wd.Visible = True

'Шаг 3: Установите диапазон вашего списка контактов
Set MyRange = Sheets("Список контактов").Range("A5:A24")

'Шаг 4: Начните цикл через каждую ячейку
For Each MyCell In MyRange.Cells

'Шаг 5: Присвойте значения каждому компоненту буквы
txtAddress = MyCell.Value
txtCity = MyCell.Offset(, 1).Value
txtState = MyCell.Offset(, 2).Value
txtPostalCode = MyCell.Offset(, 3).Value
txtFname = MyCell.Offset(, 5).Value
txtFullname = MyCell.Offset(, 6).Value

'Шаг 6: Вставьте структуру шаблона документа
wd.Selection.InsertFile _
ThisWorkbook.Path & "\" & "MailMerge.docx"

'Шаг 7: Заполните каждую соответствующую закладку с соответствующим 'значением
wd.Selection.Goto What:=wdGoToBookmark, Name:="Покупатель"
wd.Selection.TypeText Text:=txtFullname
wd.Selection.Goto What:=wdGoToBookmark, Name:="Адрес"
wd.Selection.TypeText Text:=txtAddress
wd.Selection.Goto What:=wdGoToBookmark, Name:="Город"
wd.Selection.TypeText Text:=txtCity
wd.Selection.Goto What:=wdGoToBookmark, Name:="Регион"
wd.Selection.TypeText Text:=txtState
wd.Selection.Goto What:=wdGoToBookmark, Name:="Индекс"
wd.Selection.TypeText Text:=txtPostalCode
wd.Selection.Goto What:=wdGoToBookmark, Name:="Имя"
wd.Selection.TypeText Text:=txtFname

'Шаг 8: Очистить все оставшиеся закладки
On Error Resume Next
wdDoc.Bookmarks("Адрес").Delete
wdDoc.Bookmarks("Покупатель").Delete
wdDoc.Bookmarks("Город").Delete
wdDoc.Bookmarks("Регион").Delete
wdDoc.Bookmarks("Имя").Delete
wdDoc.Bookmarks("Индекс").Delete

'Шаг 9: Перейти до конца, вставить новую страницу и начать со следующей 'ячейки
wd.Selection.EndKey Unit:=wdStory
wd.Selection.InsertBreak Type:=wdPageBreak
Next MyCell

'Шаг 10: Установить курсор на начало и очистить память
wd.Selection.HomeKey Unit:=wdStory
wd.Activate
Set wd = Nothing
Set wdDoc = Nothing

End Sub

Как этот код работает

  1. Шаг 1 объявляет четыре переменные:
    • wd переменная объекта, которая выставляет объект Word Application,
    • wdDoc является переменной объекта, которая выставляет объект Word Document,
    • MyRange содержит диапазон, определяющий список контактов,
    • MyCell используется для передачи значений ячеек в строковые переменные.
    • Мы также объявляем шесть строковых переменных. Каждый из них имеет компонент — часть информации для каждого контакта в списке контактов.
  2. Этот шаг открывает Word с пустым документом. Обратите внимание, что мы устанавливаем свойство Visible приложения Word, значение True.
  3. Шаг 3 определяет каждый контакт в списке контактов. Обратите внимание, что этот диапазон выбирает только первый столбец в таблице контактов. Это происходит потому, что каждая ячейка в диапазоне должна быть передана в индивидуальном порядке к строковым переменным. Выбор только первого столбца дает нам одну ячейку в строке. С этой одной ячейке, мы можем легко настроить курсор вправо или влево, чтобы захватить ячейки вокруг него.
  4. Этот шаг запускает цикл по каждому контакту, как это определено в установленном диапазоне на шаге 3.
  5. Шаг 5 использует метод Offset в Excel, чтобы захватить значение каждого поля в конкретной строке. Начнем с диапазона, определенного на шаге 3 (первый столбец в списке
    контактов). Затем мы используем Offset для перемещения курсора на определенное число столбцов вправо, чтобы захватить данные в каждом соответствующем поле. Как просмотрено каждое поле, мы относим их значения соответствующей переменной строки.
  6. На шаге 6 мы вводим существующий шаблон в пустой документ в Word. Это равносильно копированию структуры нашего шаблона и вставки его в пустой документ.
  7. Шаг 7 присваивает значение каждой переменной строки в соответствующей закладке. Как видите в коде, этот шаг выбирает закладку по имени, а затем изменяет текст на значение назначенной переменной строки.
  8. Цель в шаге 8 удалить любые беспризорные закладки. Если какие-либо закладки задерживаются, мы получаем дубликаты закладок процедура перебирает каждую ячейку.
  9. На данный момент в коде, мы создали документ для одного контакта в нашем списке контактов. Идея состоит в том, чтобы создать новый пустой документ, чтобы мы могли выполнить ту же процедуру для следующего контакта. Вставка разрыва страницы эффективно создает новый пустой документ. Затем возвращаемся обратно к шагу 5, где мы собираем контактную информацию для следующей строки в списке. Затем на шаге 6, вставьте чистый шаблон (в комплекте с закладками) в новую страницу. И, наконец, мы присваиваем значения в закладки и очищаем. For … Next цикл гарантирует, что этот цикл повторится для каждой строки в списке контактов.
  10. Шаг 10 очищает память

Как использовать

Для реализации этого макроса, вы можете скопировать и вставить его в стандартный модуль:

  1. Активируйте редактор Visual Basic, нажав ALT + F11.
  2. Щелкните правой кнопкой мыши имя проекта / рабочей книги в окне проекта.
  3. Выберите Insert➜Module.
  4. Введите или вставьте код.
Оцените статью
Добавить комментарий