soft


Немного о макросах

Макросы — очень полезное средство автоматизации работы в Microsoft Office. На их плечи можно переложить всю рутинную работу, которую нужно выполнять время от времени каждому пользователю этого пакета. Сегодня мы с вами познакомимся с тем, как можно создавать макросы.

Начнем с простого


Макрос — это записанная последовательность операций, которую можно запустить на выполнение. Тогда при запуске все записанные команды выполняются в той последовательности, в которой были записаны. Фактически макрос — это маленькая программа, которая может храниться в вашем документе или шаблоне документа. Шаблон — это такая заготовка документа, «болванка» для типовых видов документов: отчет, презентация продукта, страница корпоративного сайта и т.д. Самостоятельно создать макрос можно и безо всяких навыков программирования. Давайте вместе посмотрим на простом примере, как это делается. Каждому, кому приходилось работать с чужими документами в «Офисе», наверняка попадались такие документы, где форматирование абзацев выполнено при помощи табуляции. Это не совсем правильно (хотя я и сам люблю так иногда делать), поскольку может помешать при транспортировке из "Ворда" в другие программы, и особенно нехорошо это при верстке. Для борьбы с этим явлением было бы разумно создать небольшой макрос: один раз сделал, одним нажатием клавиш запустил — и наслаждаешься результатами.

В старых (до 2007-го) версиях «Офиса» в меню Сервис выберите пункт Макрос, а дальше — Начать запись. Для создания макроса нужно ввести его название и комментарий к нему. Какими именно они будут, не имеет значения, поэтому введите те, которые покажутся наиболее удобными для вас. А вот сохранить его лучше в шаблоне, чтобы применить можно было к любому документу. Дело в том, что макросы, которые сохраняются в каком-то одном документе, и загружаются только тогда, когда этот документ открыт. Мы же делаем макрос, который пригодится во множестве документов. Можно также, опять-таки, для собственного же удобства, вынести его на панель инструментов (кнопка "Назначить панели инструментов") — куда именно, решать, опять-таки, вам. Также доступ к макросу можно получить через меню Сервис — Макрос — Макросы. Кстати, там же макрос можно и удалить, если он вам больше не нужен. Теперь собственно о записи. В меню Правка выбирается пункт Заменить, где указывается замена всех последовательностей символов абзаца и табуляции на один только символ абзаца. Как это сделать? Да очень просто. Нажимаем кнопку Больше внизу окна, а на появившейся панели жмем кнопку Специальный. В появившемся списке специальных символов выбираем те, которые нужно — то есть для поля Найти это «^p^t», а для поля Заменить — «^p». Дальше нажимаем кнопку Заменить все, а затем — Остановить запись на панели записи макроса. Макрос готов.

Что касается Microsoft Office 2007, то здесь все немного иначе из-за отсутствия меню. Здесь, во-первых, для начала нужно включить соответствующую панель инструментов. Для этого нужно щелкнуть по кнопке Офис (в верхнем левом углу окна), выбрать Параметры Word > Основные > Показывать вкладку Разработчик. После этого все действия, в общем-то, аналогичны: нажимаем Запись макроса на появившейся ленте Разработчик, записываем, пользуемся.

Основы программирования макросов

Давайте теперь поговорим немного об основных понятиях, а также о приемах и способах создания макросов, которые не просто могут пригодиться, а наверняка пригодятся при работе с макросами. Речь идет о программировании на языке VBA.

VBA — это Visual Basic for Applications (Visual Basic для приложений). Именно этот язык программирования используется для создания и хранения макросов в Microsoft Office. Это самый настоящий язык программирования, но не нужно этого пугаться, потому что VBA — один из самых простых языков, придуманных людьми, и, вообще-то, поэтому корпорация Microsoft встроила в свой продукт именно этот язык, а не какой-нибудь другой. Выберите в меню Сервис пункт Макрос, а в нем — Редактор Visual Basic (в 2007-м «Офисе» нажмите кнопку Visual Basic на ленте Разработчик). При открытии окна редактора в нем автоматически появляются все шаблоны, содержащие макросы. С левой стороны находятся проводник по проекту (сверху) и редактор свойств объектов (ниже). Текст в окне и есть текст макроса, или, как принято говорить среди программистов, его исходный код. Каждый макрос начинается словом "Sub", за которым следуют название макроса и две скобки, а заканчивается «End Sub». С апострофов начинаются комментарии, т.е. тот текст, который игнорируется при выполнении макросов. Обычно макросы, записанные пользователем, содержат три комментария: название, поясняющий текст, введенный пользователем, и дату создания. Посмотрим простой пример: нижеследующий макрос закрывает открытый в данный момент файл.

Sub CloseActiveDocument()
' Закрывает открытый в настоящий момент документ
ActiveDocument.Close
End Sub

Команда в предпоследней строке приведенного примера содержит функцию Close, которая относится к объекту, представляющему собой активный в данный момент времени документ. Вторая строчка — это комментарий. После символа «'» можно писать все, что угодно, и это никак не будет влиять на выполнение макроса. Но одним этим при программировании ограничиться не получится. Пойдем дальше — к переменным, константам, циклам и прочим интересным, а главное — полезным вещам. Как и в математике, переменная — это что-то, что может меняться в ходе выполнения программы (в нашем случае макроса). Все переменные должны быть явно описаны в тексте макроса. Описываются они следующим образом: Dim <имя переменной> As <тип переменной>. Имя переменной должно быть уникальным в пределах макроса. Т.е. нельзя объявить переменные двух разных типов с одинаковыми именами. Типы бывают разными: это могут быть объекты, как в примере выше, числа, строки и т.д.

Константа — это какое-то число или строка, которой для удобства использования присвоено имя (как переменной). Фактически и они в VBA играют ту же роль, что и в математике, т.е. упрощают и делают более понятной запись. Ведь гораздо проще записать число Эйлера как e, а не 2,718281828. Записывать константы очень просто: <имя константы> = <ее значение>. Например, e = 2,718281828. Цикл в программе применяется тогда, когда нужно выполнить какое-либо действие несколько раз. Цикл создается таким образом: Do While <условие> <тело цикла> Loop, или Do <тело цикла> Loop Until <условие>, или For <имя переменной> To <количество повторений> Step <шаг> <тело цикла> Next. Если шаг равняется единице, то его можно не указывать. Тело цикла — это именно те действия, которые нам надо выполнить много раз. Условие — что-то, что определяет, до каких пор нам продолжать выполнение цикла. Условие должно быть логического типа — например, N < 10. То есть, если мы напишем:

n = 1
Do While n < 10
n = n + 1
ActiveDocument.Close
Loop,

или
n = 1
Do
n = n + 1
ActiveDocument.Close
Loop Until n = 10,

или
For n = 1 To 10 Step 1
ActiveDocument.Close
Next,

это будет одно и то же — закроем активный документ целых 10 раз. Операторы условного перехода — конструкции VBA, которые помогают макросу принять решение, что делать в данной ситуации. Вид записи их таков: If <условие> Then <что делать, если условие истинно> Else <что делать, если условие ложно> End If. Если в случае ложного условия делать ничего не надо, то можно ставить End If прямо после блока <что делать, если условие истинно>. Как это работает, мы с вами увидим несколько ниже.

Более сложный пример


Перед вами пример, который ищет по всему тексту документа Word интернет-ссылки и вставляет их внизу документа.

Sub Links()
' Этот макрос ищет все ссылки интернета (URL) в документе
' и сохраняет в список
HTTP_Prefix = "http"
WWW_Prefix = "www"
FTP_Prefix = "ftp"
Dim I As Integer
Dim J As Integer
' I, J — служебные переменные, счетчики циклов
Dim S As String
Dim S1 As String
' Слово, которое мы исследуем на причастность к URL
Dim Lst As String
' Добытый список ссылок
Dim URLCount As Integer
' Их количество
For I = 1 To ActiveDocument.Words.Count
S = ActiveDocument.Words(I)
If (InStr(HTTP_Prefix, S) Or InStr(WWW_Prefix, S) Or InStr(FTP_Prefix, S)) Then
URLCount = URLCount + 1
' Найдена еще одна ссылка — увеличиваем счетчик
Lst = Lst + Chr(13)
' Chr(13) — символ начала новой строки
J = I
‘ Вынимаем текст самой ссылки и добавляем его в список
Do
S1 = ActiveDocument.Words(J)
Lst = Lst + S1
J = J + 1
Loop Until (S1 = " ") Or (S1 = Chr(13))
End If
Next
ActiveDocument.Words.Item(ActiveDocument.Words.Count).InsertAfter(Chr(13) + "Ссылки: " + Lst + Chr(13) + "Количество ссылок: " +
Str(URLCount))
Beep
' Звуковой сигнал — поиск завершен!
End Sub

Теперь давайте разберемся с этим макросом, поскольку, полагаю, большинству пользователей комментариев по ходу программного кода будет недостаточно. Сначала идет объявление нескольких переменных, которые принимают самое непосредственное участие в работе этого макроса. Integer — это целое число, String — это строка. Назначение каждой из этих переменных разъясняется в комментариях. Далее мы проверяем наличие в каждом слове документа префиксов "http", "ftp" или "www" и, если они есть, добавляем в список наших URL’ов все слова после префикса до следующего пробела, закрывающей скобки или начала новой строки. Для этого используется цикл, считывающий по одному символу и добавляющий считанные символы в список ссылок до тех пор, пока он не наткнется на один из перечисленных выше символов. Кстати, вы заметили, что редактор Visual Basic помогает вам подсказками? Они всплывают автоматически, но, кроме того, вы всегда можете вызвать их из меню Правка или с помощью горячих клавиш. По Ctrl+J вызывается список доступных свойств объектов (о самих объектах мы поговорим чуть позже), по Ctrl+Shift+J — список доступных констант. С помощью Ctrl+Shift+I — список параметров функции (т.е. того, что нужно писать в скобочках за ее именем), а по Ctrl+Space — список доступных объектов, переменных, функций и констант вместе.

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



SF

© компьютерная газета