105

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

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

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

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

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


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

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

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

Макросы в 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),

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

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


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

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


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

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

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

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

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

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

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


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


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


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

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


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


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

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


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


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

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

Слово MERGEFORMAT в данном случае не имеет значения, т. к. это просто директива «не менять формат», которую MS Word добавляет автоматически.


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


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


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

Сложно? Нет! Попробуем посложнее – опишем скрипт InsertCaptionToImage.bas (добавить подпись к рисунку).

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

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

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

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

Вы смотрите срез комментариев. Показать все
2
Автор поста оценил этот комментарий
Макросы в MS Word?
Нет, спасибо! У меня уже есть половой партнёр. Живой. Противоположного пола.
раскрыть ветку (6)
3
Автор поста оценил этот комментарий
В ворде сложно правильно и быстро работать без макросов, потому что эта программа не приспособлена ни к каким странам кроме англоязычных. Микрософт делает просто перевод программы, а не адаптацию. Было бы поле wdOnlyNumber, я бы не писал макрос.
раскрыть ветку (2)
3
Автор поста оценил этот комментарий
Полностью согласен. Поэтому возьму перо и продолжу писать письмо.
0
Автор поста оценил этот комментарий

меня это тоже постоянно напрягает, что только перевод без адаптации

0
Автор поста оценил этот комментарий
...жаль, что собачка)
раскрыть ветку (2)
2
Автор поста оценил этот комментарий
Мой следующий ответ будет полнее и не оставит тебе ни малейшего шанса!!111
раскрыть ветку (1)
0
Автор поста оценил этот комментарий
Вызов принят!!1
Вы смотрите срез комментариев. Чтобы написать комментарий, перейдите к общему списку

Темы

Политика

Теги

Популярные авторы

Сообщества

18+

Теги

Популярные авторы

Сообщества

Игры

Теги

Популярные авторы

Сообщества

Юмор

Теги

Популярные авторы

Сообщества

Отношения

Теги

Популярные авторы

Сообщества

Здоровье

Теги

Популярные авторы

Сообщества

Путешествия

Теги

Популярные авторы

Сообщества

Спорт

Теги

Популярные авторы

Сообщества

Хобби

Теги

Популярные авторы

Сообщества

Сервис

Теги

Популярные авторы

Сообщества

Природа

Теги

Популярные авторы

Сообщества

Бизнес

Теги

Популярные авторы

Сообщества

Транспорт

Теги

Популярные авторы

Сообщества

Общение

Теги

Популярные авторы

Сообщества

Юриспруденция

Теги

Популярные авторы

Сообщества

Наука

Теги

Популярные авторы

Сообщества

IT

Теги

Популярные авторы

Сообщества

Животные

Теги

Популярные авторы

Сообщества

Кино и сериалы

Теги

Популярные авторы

Сообщества

Экономика

Теги

Популярные авторы

Сообщества

Кулинария

Теги

Популярные авторы

Сообщества

История

Теги

Популярные авторы

Сообщества