105

Основы программирования в Microsoft Word. Работа с макросами

Предыдущие статьи:

1. Учимся работать в Microsoft Word правильно

2. Учимся работать в Microsoft Word правильно. Работа с рисунками

3. Учимся работать в LibreOffice Writer правильно


В этом уроке мы разберем среду для редактирования макросов, изучим некоторые базовые команды и научимся запускать макросы с помощью горячих клавиш.

Основное меню для работы с макросами расположено в «Вид – Макросы».

Основы программирования в Microsoft Word. Работа с макросами Microsoft Word, Длиннопост, Текст, Программирование, Макрос, Обучение

Как записывать макрос мы разбирать не будем, потому что это слишком просто и описано уже миллион раз. Вместо этого мы будем учиться писать макросы самостоятельно.

Макросы в MS Word пишутся на упрощенной реализации языка Visual Basic – VBA

или сисярпе. В данном уроке мы написание макросов на сисярпе разбирать не будем – я этого языка попросту не знаю, т. к. не питаю особенно теплых чувств к разработкам Microsoft.

Для данного урока я написал следующие макросы, помогающие исключить из работы всплывающие окна с последующим выбором из списков (что отнимает уйму времени):


1. Для вставки нумерации рисунков и таблиц (бывает полезно, когда приходится оживлять чужой документ, набранный на печатной машинке производства Microsoft);

2. Для вставки подписей к рисункам и таблицам вида «Рисунок 1 – » и «Таблица 1 – »;

3. Для вставки ссылок на нумерацию рисунков и таблиц вида «°Рисунок , «°Таблица , где перечеркнутый текст имеет тип «hidden», то есть мы автоматизируем то, что делали вручную в статье «Учимся работать в Microsoft Word правильно. Работа с рисунками».


Велик соблазн хранить все макросы в отдельном шаблоне global_macros.dotm, как это описано здесь. Но, как выяснилось, работает это только в MS Office for MAC.

Под Windows, после переноса файла global_macros.dotm в папку STARTUP (C:\Documents and Settings\{{user}}\Application Data\Microsoft\Word\STARTUP),

Основы программирования в Microsoft Word. Работа с макросами Microsoft Word, Длиннопост, Текст, Программирование, Макрос, Обучение
MS Word видит этот шаблон, но в окне «Вид – Макросы» создать, изменить или удалить макросы из global_macros.dotm мы не можем.
Основы программирования в Microsoft Word. Работа с макросами Microsoft Word, Длиннопост, Текст, Программирование, Макрос, Обучение
Также при нажатии на кнопку «Отладка» мы получаем сообщение «Project is unviewable».
Основы программирования в Microsoft Word. Работа с макросами Microsoft Word, Длиннопост, Текст, Программирование, Макрос, Обучение

Настроек, подобных «Личные параметры – Расположения файлов» в Microsoft Word 2013 for Windows я не обнаружил (возможно, это уже реализовано в MS Word 2016 или 365). Поэтому, в качестве более универсального решения, я рекомендую добавлять макросы в базовый шаблон Normal.dotm с помощью редактора Microsoft Visual Basic for Applications, который открывается из MS Word с помощью комбинации клавиш «Alt + F11».


Из-за проблем с кодировкой копировать код с русскими буквами нужно только при включенной русской раскладке.

Более хирургические варианты решения этой проблемы описаны тут.


Итак, с помощью контекстного меню «Insert – Module» к шаблону «Normal» добавляем новый модуль, в который мы будем копировать скрипт.

Основы программирования в Microsoft Word. Работа с макросами Microsoft Word, Длиннопост, Текст, Программирование, Макрос, Обучение
У меня этих модулей 6 штук,
Основы программирования в Microsoft Word. Работа с макросами Microsoft Word, Длиннопост, Текст, Программирование, Макрос, Обучение
но можно все процедуры, начинающиеся с команды Sub, поместить и в один модуль.
Основы программирования в Microsoft Word. Работа с макросами Microsoft Word, Длиннопост, Текст, Программирование, Макрос, Обучение
После того, как мы скопируем все процедуры в шаблон Normal.dotm, мы должны увидеть в окне «Вид – Макросы» что-то типа этого.
Основы программирования в Microsoft Word. Работа с макросами Microsoft Word, Длиннопост, Текст, Программирование, Макрос, Обучение
Велик соблазн написать название процедуры по-русски, чтобы название макроса по-русски же отображалось в меню «Вид – Макросы», но не делайте этого, потому что у вас случайным образом перестанут работать горячие клавиши, назначенные на запуск макросов.
Основы программирования в Microsoft Word. Работа с макросами Microsoft Word, Длиннопост, Текст, Программирование, Макрос, Обучение

Этот эффект лично у меня проявился не сразу (через несколько дней после начала работы с макросами, изначально все назначенные горячие клавиши работали как надо), но он исчез сразу после того, как я переименовал все процедуры.

Теперь настроим горячие клавиши для запуска макросов.

Для этого переходим в «Файл – Параметры – Настроить ленту – Сочетания клавиш: Настройка...»

Основы программирования в Microsoft Word. Работа с макросами Microsoft Word, Длиннопост, Текст, Программирование, Макрос, Обучение
Затем слева в окне «Настройка клавиатуры» выбираем «Макросы», а справа макрос, для запуска которого мы хотим назначить комбинацию клавиш.
Основы программирования в Microsoft Word. Работа с макросами Microsoft Word, Длиннопост, Текст, Программирование, Макрос, Обучение
Поместив курсор в поле «Новое сочетание клавиш» и набрав его на клавиатуре, нажимаем «Назначить». На данный момент все наиболее удобные комбинации клавиш в MS Word уже назначены разработчиками, но Вы можете спокойно переназначить те из них, которые Вы не используете.
Основы программирования в Microsoft Word. Работа с макросами Microsoft Word, Длиннопост, Текст, Программирование, Макрос, Обучение

В данном примере мы теперь можем добавить подпись к таблице комбинацией клавиш «Ctrl + Shift +ю».


Теперь разберем три из шести написанных макросов для рисунков (макросы для таблиц абсолютно аналогичны).


В принципе, программирование на бейсике особо ничем не отличается от программирования на остальных языках. Современный бейсик похож на Python и Ruby тем, что в нем используются отступы. Комментарии (неисполняемые строки) начинаются с одинарной кавычки.


Как я уже упоминал, процедура в VBA начинается со слова Sub, и заканчивается End Sub.

Переменная объявляется с помощью команды Dim, значение переменной устанавливается с помощью команды Set.


Пожалуй, это все, что нам необходимо знать для того, чтобы начать писать простейшие скрипты.


Писать скрипты можно непосредственно в редакторе Microsoft Visual Basic for Applications (он «на лету» исполняет скрипт и показывает ошибки), но мне для демонстрации проще делать это в текстовом редакторе Notepad++.

Основы программирования в Microsoft Word. Работа с макросами Microsoft Word, Длиннопост, Текст, Программирование, Макрос, Обучение

Опишем скрипт InsertImageSequence.bas (вставить номер рисунка).


В целом для написания собственных скриптов вам понадобится научиться работать с полями и текстом.


Логика написания скрипта такая:

1. Нам нужно добавить поле, которое выводит номер последовательности. Посмотреть вид этого поля можно в контекстном меню «Коды / значения полей», кликнув по полю, полученному традиционным способом, правой кнопкой мыши;

Основы программирования в Microsoft Word. Работа с макросами Microsoft Word, Длиннопост, Текст, Программирование, Макрос, Обучение
Слово MERGEFORMAT в данном случае не имеет значения, т. к. это просто директива «не менять формат», которую MS Word добавляет автоматически.


2. Далее необходимо указать место, в которое мы хотим вставить текст / поле. В данном случае это текущее местонахождение выделения / курсора. Все основные операции с текстом в VBA замечательно описал Биллиг Владимир Арнольдович, и для понимания работы с объектами Range и Selection, которые мы будем использовать, я рекомендую прочитать его статью;


3. Необходимо в выделение добавить поле с присвоенным ему типом (в данном случае SEQ). Для этого мы будем использовать метод Add, описанный в документации Microsoft. Как обозначаются типы полей в скриптах описано здесь. В данном случае нам необходимо узнать, как обозначается в скрипте тип поля SEQ (wdFieldSequence), чтобы указать его в качестве параметра Type метода Add. Также необходимо указать параметры, которые мы посмотрели в пункте 1.


В итоге у нас получается что-то типа этого

Основы программирования в Microsoft Word. Работа с макросами Microsoft Word, Длиннопост, Текст, Программирование, Макрос, Обучение
Сложно? Нет! Попробуем посложнее – опишем скрипт InsertCaptionToImage.bas (добавить подпись к рисунку).
Основы программирования в Microsoft Word. Работа с макросами Microsoft Word, Длиннопост, Текст, Программирование, Макрос, Обучение

Элементарно. Здесь просто добавились некоторые методы из статьи Биллига для добавления текста до и после поля.

Наконец, рассмотрим скрипт InsertRefToImage.bas (добавить ссылку на изображение).

Основы программирования в Microsoft Word. Работа с макросами Microsoft Word, Длиннопост, Текст, Программирование, Макрос, Обучение

Что использовалось для написания последнего скрипта:

1. Неразрывный пробел средствами VBA

2. Getting User Input in a Dialog Box

3. Word Macro for Insert Cross-Reference

4. How to: Programmatically Hide Text in Documents


Все эти замечательные рецепты ищутся в обыкновенном google по запросу, начинающемуся на «word macro» или «word vba».


В следующей статье мы рассмотрим основные правила типографики и работу со списком литературы в MS Word.


Ссылка на макросы


Ссылка на обновленный шаблон Normal.dotm

Чтобы оставить комментарий, необходимо или