01 Что делает макрос
Одним из наиболее востребованных форм интеграции Word с почтой — это слияние. В большинстве случаев рассылки писем относятся к процессу создания одного письма или документа, а затем его унификация с помощью документа, содержащего имена и адреса клиентов. Предположим, что у вас есть список клиентов, и вы хотите составить письмо для каждого клиента. При помощи слияния, вы можете написать письмо один раз, а затем запустить функцию слияния в Word, чтобы автоматически создалось письмо для каждого клиента, прикрепляя соответствующий адрес, имя и другую информацию для каждого письма. Для автоматизации вы можете использовать макрос для имитации функции почтового слияния из Excel.
Идея относительно проста. Вы начинаете с шаблона, который содержит закладки, идентифицирующие каждый элемент контактной информации. После того, как шаблон готов нужно просто перебрать каждого в списке контактов, вставляя их контактную информацию в соответствующие закладки. Одним из образцов является документ под названием Рассылка.docx. Это документ имеет все закладки, необходимые для запуска примера кода, показанного здесь.
Обратите внимание, что вам нужно будет установить ссылку на библиотеку объектов Microsoft Word. Для этого откройте VBA в Excel и выберите Tools➜References. Откроется диалоговое окно «References». Прокрутите вниз, пока вы найдите запись Microsoft Word XX Object Library, где XX — это ваша версия Word. Поставьте флажок рядом с записью.
02 Код макроса
SubSliyanieSWord()'Шаг 1: Объявляем переменныеDimwdAsWord.ApplicationDimwdDocAsWord.DocumentDimMyRangeAsExcel.RangeDimMyCellAsExcel.RangeDimtxtAddressAsStringDimtxtCityAsStringDimtxtStateAsStringDimtxtPostalCodeAsStringDimtxtFnameAsStringDimtxtFullnameAsString'Шаг 2: Запустите Word и добавьте новый документSetwd =NewWord.ApplicationSetwdDoc = wd.Documents.Addwd.Visible =True'Шаг 3: Установите диапазон вашего списка контактовSetMyRange = Sheets("Список контактов").Range("A2:A3")'Шаг 4: Начните цикл через каждую ячейкуForEachMyCellInMyRange.Cells'Шаг 5: Присвойте значения каждому компоненту письмаtxtAddress = MyCell.ValuetxtCity = MyCell.Offset(, 1).ValuetxtState = MyCell.Offset(, 2).ValuetxtPostalCode = MyCell.Offset(, 3).ValuetxtFname = MyCell.Offset(, 4).ValuetxtFullname = MyCell.Offset(, 5).Value'Шаг 6: Активируйте шаблон документаwd.Selection.InsertFile _ThisWorkbook.Path &"\" & "Рассылка.docx"'Шаг 7: Заполните каждую соответствующую закладку с соответствующим значениемwd.Selection.Goto What:=wdGoToBookmark, Name:="Покупатель"wd.Selection.TypeText Text:=txtFullnamewd.Selection.Goto What:=wdGoToBookmark, Name:="Адрес"wd.Selection.TypeText Text:=txtAddresswd.Selection.Goto What:=wdGoToBookmark, Name:="Город"wd.Selection.TypeText Text:=txtCitywd.Selection.Goto What:=wdGoToBookmark, Name:="Регион"wd.Selection.TypeText Text:=txtStatewd.Selection.Goto What:=wdGoToBookmark, Name:="Индекс"wd.Selection.TypeText Text:=txtPostalCodewd.Selection.Goto What:=wdGoToBookmark, Name:="Имя"wd.Selection.TypeText Text:=txtFname'Шаг 8: Очистить все оставшиеся закладкиOnErrorResumeNextwdDoc.Bookmarks("Адрес").DeletewdDoc.Bookmarks("Покупатель").DeletewdDoc.Bookmarks("Город").DeletewdDoc.Bookmarks("Регион").DeletewdDoc.Bookmarks("Имя").DeletewdDoc.Bookmarks("Индекс").Delete'Шаг 9: Перейти до конца, вставить новую страницу и начать со следующей ячейкиwd.Selection.EndKey Unit:=wdStorywd.Selection.InsertBreak Type:=wdPageBreakNextMyCell'Шаг 10: Установить курсор на начало и очистить памятьwd.Selection.HomeKey Unit:=wdStorywd.ActivateSetwd =NothingSetwdDoc =NothingEndSub
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
Написать в тех.поддержку
Подписывайтесь:
авторизуйтесь