Как создать код макроса в Microsoft Word

Возможно, у вас есть ощущение, что тема макросов в Ворде достаточно маргинальная. Кто ими может пользоваться-то вообще? Ну, малварь делают иногда. Да и пишутся они на давно забытом VBA (Visual Basic for Applications, он же несколько урезанный Visual Basic 6 в интерпретируемом виде), фу!

Но на самом деле у многих ведь возникает потребность то какой-нибудь отчётик в ворде написать, то курсовую оформить, то резюме перед отправкой в компанию вашей мечты подправить. А у некоторых работа напрямую связана с Word. Часто различные системы документации предлагают экспорт в форматы doc или docx, которые нужны вашим заказчикам. И бывает, что документы после экспорта выглядят фигово, приходится их исправлять.

Работа в ворде нередко подразумевает выполнение каких-то однообразных повторяющихся действий, которые иногда (но далеко не всегда!) решаются грамотной настройкой стилей и их применением, а также использованием шаблонов. Как же автоматизировать всё остальное? Тут-то нам на помощь приходят те самые макросы.

Что же в них такого хорошего? Ну, например, они автоматически и достаточно быстро выполняют за вас однообразные действия. Могут что-то подсчитать, переформатировать документ, пометить аннотациями подозрительные места, — словом, всё, что запрограммируете. Могут даже в режиме реального времени что-то исправлять и о чем-то предупреждать, пока вы пишете документ. VBA в Word позволяет автоматизировать практически все действия, которые вы можете выполнить с документом вручную.

Макросы можно прикрепить как к конкретному документу (в чём для нас мало пользы, а для писателей троянов это единственная опция), так и к самому ворду, что позволяет применять макросы к любому документу, с которым вы работаете.

Макросы работают в любой версии Word и требуют минимум правок при переносе с одной версии на другую (а чаще всего вообще не требуют). На макросах можно даже реализовать полноценный пользовательский интерфейс с формами!

Давайте же занырнём в Visual Basic и напишем что-нибудь полезное! В качестве первого примера я покажу, как сделать макрос, который заменит два и более последовательных перевода строки на единственный. Это часто требуется при исправлении документов после экспорта из систем документации, или если вы хотите удалить случайно проставленные лишние переводы строк в собственноручно написанном документе. Макрос сделаем добротный, с пользовательским интерфейсом и прогрессом выполнения операции.

Чтобы начать писать или использовать макросы, сначала требуется убедиться, что в Word’е отображается панель "Разработчик" ("Developer"). Если она у вас не отображается, следует зайти после создания нового документа в меню "Файл" ("File") -> "Параметры" ("Options") -> "Настроить ленту" ("Customize Ribbon"), после чего найти там и установить флажок "Разработчик" ("Developer").

Enable Word developer tab

После этого нужно зайти на вкладку "Разработчик" и выбрать меню "Visual Basic".

Word Visual Basic button

В открывшемся окне слева вы увидите два проекта: "Normal" и проект, относящийся к текущему открытому документу. Возможно, в проекте "Normal" у вас уже будет какой-то файл в каталоге "Modules". В любом случае, создайте новый модуль, кликнув правой кнопкой по проекту "Normal" и выбрав "Insert" -> "Module".

Word insert new module

Созданный модуль представляет из себя файл, куда мы и будем писать код макросов. Можно переименовать модуль (по умолчанию его имя будет "Module1") в окне "Properties" -> "Name". Я назову свой модуль "AllMacros". Теперь откроем код модуля, дважды кликнув по его имени, и приступим к созданию макроса.

Напомню, что наша цель — заменить два и более последовательных перевода строки на единственный, произведя замены по всему документу. Очевидно, нам потребуется функция, которая осуществляет поиск по тексту, ведь мы хотим найти несколько последовательных переводов строки. В Word это эквивалентно началу нового параграфа. Вы могли бы осуществить поиск начала нового параграфа через обычное окно поиска, введя в поле поиска ^p , ^13 или ^013 (что соответствует ASCII-коду перевода строки). Функция поиска будет выглядеть так:

Создание макроса из готового кода

Если у вас есть готовый код макроса, например, с этого сайта, то следующий совет поможет внедрить его в ваши документы. Есть две возможности создания макроса из готового кода.

Первый вариант: создание макроса с помощью диалогового окна Макрос

Второй вариант: создание макроса из готового кода

Еще записи по вопросам использования Microsoft Word:

  • 3 способа очистки списка недавно открытых документов
  • Абзац с цветным фоном
  • Автоматическая запись макроса
  • Автоматическая расстановка переносов
  • Автоматическое обновление полей при открытии документа
  • Автоматическое сохранение документа при его закрытии
  • Быстрая смена ориентации страниц документа
  • Быстрое перемещение между открытыми документами Word
  • Быстрое создание нового документа на основе шаблона
  • Быстрый ввод текста с помощью команды =rand()
  • Ввод часто повторяющихся фрагментов текста
  • Вставка будущей даты
  • Вставка документа с книжной ориентацией в документ с альбомной ориентацией
  • Вставка завтрашней даты
  • Вставка изображений из указанной папки для Word 2007
  • Вставка неформатированного текста
  • Вставка скопированного текста в предопределенном формате
  • Вставка текста с полями в нижний колонтитул
  • Вставка текста с помощью кнопки
  • Выделение видимой части экрана
  • Двойная нумерация страниц в документе
  • Задать обтекание текстом для всех рисунков в документе
  • Замена жаргонных слов в тексте
  • Замена знаков абзаца на пробелы в выделенном тексте
  • Замена текста в скобках на пробел

Комментариев: 35

Алексей
10.04.2008 в 11:14 | #1
Как сделать чтобы при печата документа выполнялся созданный макрос?

10.04.2008 в 11:28 | #2

Наверное, вопрос требует уточнения: в какой именно момент должен выполняться макрос? Можно сделать свой макрос отправки документа на печать и выполнения перед этим какого-то действия (другого макроса), или после.

Алексей
10.04.2008 в 12:16 | #3

Макрос должен выполняться во время печати. До или после некоторого элемента документа. В частности макрос выполняет разрыв страницы.

10.04.2008 в 12:42 | #4

Алексей, макросы следует выполнять до момента печати, так как иначе документ уже будет в памяти принтера. Соотвтественно, разрывы страницы нужно выполнить сначала, а потом отправить документ на печать.

Алексей
10.04.2008 в 13:48 | #5

Антон,выполнение макроса "во время печати" — имеется в виду во время формирования документа на печать. (Конечно, если документ сформирован и помещен в спул ничего не сделаешь). И еще требуется узнать при формировании документа на печать как далеко находится некоторый элемент от края страницы т.е. уместиться еще вместе несколько строчек или нет. Строки разрывать на разных листах нельзя. (Колонтитулы не подходят). Макрос я пробовал привязать к элементу — поле. (Панель формы, кнопка текстовое поле — выполнить макрос) — не получается.

Alexander
04.09.2008 в 10:43 | #6

Интересно, жива ли тема? Но все же попытаюсь. Имеется книга чисто макросов. Она не меняется. Эти макросы используются в целом ряде других книг, к. содержат чисто данные. Данные обновляются от одного до нескольких раз в месяц.

И каждый раз создаются новые книги. В 2003 офисе добавил кнопку на панель инструментов, назначил ей макрос и указал путь к книге макросов. Все работало замечательно. Перешли на 2007 и все встало. Такой вариант работает только в том случае, если макрос внедрить в книгу (а их около 20 шт. и постоянно создаются новые взамен устаревших), что не есть удобно. Попробовал такой вариант.

Открыл книгу макросов, добавил кнопку на быструю панель, подцепил к ней макрос. Потом открываю сразу два файла — макросы и данные. В этом случае макрос запускается, но потом вываливается с ошибкой. Ругается на глобальные переменные. Подозреваю, из-за того, что пытается выполнить в контексте книги данных, а не книги макросов.

Что делать?

Оцените статью
InternetDoc.ru
Добавить комментарий