01 Что делает макрос
Одним из наиболее востребованных форм интеграции Word с почтой — это слияние. В большинстве случаев рассылки писем относятся к процессу создания одного письма или документа, а затем его унификация с помощью документа, содержащего имена и адреса клиентов. Предположим, что у вас есть список клиентов, и вы хотите составить письмо для каждого клиента. При помощи слияния, вы можете написать письмо один раз, а затем запустить функцию слияния в Word, чтобы автоматически создалось письмо для каждого клиента, прикрепляя соответствующий адрес, имя и другую информацию для каждого письма. Для автоматизации вы можете использовать макрос для имитации функции почтового слияния из Excel.
Идея относительно проста. Вы начинаете с шаблона, который содержит закладки, идентифицирующие каждый элемент контактной информации. После того, как шаблон готов нужно просто перебрать каждого в списке контактов, вставляя их контактную информацию в соответствующие закладки. Одним из образцов является документ под названием Рассылка.docx. Это документ имеет все закладки, необходимые для запуска примера кода, показанного здесь.
Обратите внимание, что вам нужно будет установить ссылку на библиотеку объектов Microsoft Word. Для этого откройте VBA в Excel и выберите Tools➜References. Откроется диалоговое окно «References». Прокрутите вниз, пока вы найдите запись Microsoft Word XX Object Library, где XX — это ваша версия Word. Поставьте флажок рядом с записью.
02 Код макроса
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(
"A2:A3"
)
'Шаг 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(, 4).Value
txtFullname = MyCell.Offset(, 5).Value
'Шаг 6: Активируйте шаблон документа
wd.Selection.InsertFile _
ThisWorkbook.Path &
"\" & "
Рассылка.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
03 Как работает макрос
1. Шаг 1 объявляет четыре переменные:
- wd переменная объекта, которая выставляет объект Word Application,
- wdDoc является переменной объекта, которая выставляет объект Word Document,
- MyRange содержит диапазон, определяющий список контактов,
- MyCell используется для передачи значений ячеек в строковые переменные.
Мы также объявляем шесть строковых переменных. Каждая из них содержит часть информации для каждого контакта в списке контактов.
2. Этот шаг открывает Word с пустым документом. Обратите внимание, что мы устанавливаем свойству Visible значение 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 очищает память
04 Как использовать
Для реализации этого макроса, вы можете скопировать и вставить его в стандартный модуль:
1. Активируйте редактор Visual Basic, нажав ALT + F11.
2. Щелкните правой кнопкой мыши имя проекта / рабочей книги в окне проекта.
3. Выберите Insert➜Module.
4. Введите или вставьте код во вновь созданном модуле.
05 Скачать файл
Автор проекта
Дмитрий Якушев
Привет! Меня зовут Дмитрий. С 2014 года Microsoft Cretified Trainer. Вместе с командой управляем этим сайтом. Наша цель - помочь вам эффективнее работать в Excel.
Изучайте наши статьи с примерами формул, сводных таблиц, условного форматирования, диаграмм и макросов. Записывайтесь на наши курсы или заказывайте обучение в корпоративном формате.
Сайт https://akademia-excel.ru/
ИП Якушев Дмитрий Александрович
ОГРНИП: 314501721200022
ИНН: 501706813807
Образовательная лицензия № Л035-01255-50/01194039
Почта: info@akademia-excel.ru
Телефон для связи: + 7 (958) 697-73-88, + 7 (495) 145-23-86
Регистрация на сайте означает согласие с пользовательским соглашением и на получение рассылки и рекламных материалов.
Политика в отношении обработки и защиты персональных данных.
Банковские реквизиты:
Расчетный счет 40802810500000003597
Банк АО «Тинькофф Банк»
Юридический адрес Банка Москва, 123060,1-й Волоколамский проезд, д. 10, стр. 1
Корр. счет Банка 30101810145250000974
ИНН Банка 7710140679
БИК Банка 044525974
Подписывайтесь на нас в соц.сетях:
Сайт https://akademia-excel.ru/
ИП Якушев Дмитрий Александрович
ОГРНИП: 314501721200022
ИНН: 501706813807
Образовательная лицензия № Л035-01255-50/01194039
Банковские реквизиты:
Расчетный счет 40802810500000003597
Банк АО «Тинькофф Банк»
Юридический адрес Банка Москва, 123060,1-й Волоколамский проезд, д. 10, стр. 1
Корр. счет Банка 30101810145250000974
ИНН Банка 7710140679
БИК Банка 044525974
Регистрация на сайте означает согласие с пользовательским соглашением и на получение рассылки и рекламных материалов.
Политика в отношении обработки и защиты персональных данных.
Почта: info@akademia-excel.ru
Телефон для связи: + 7 (958) 697-73-88, + 7 (495) 145-23-86
Написать в тех.поддержку
Подписывайтесь:
авторизуйтесь