Если текст предыдущих абзацев вам пока непонятен, то вернитесь к нему позже, когда узнаете о VBA больше.
4. «Формы». Формы — это диалоговые окна программ, которые можно разработать по своему вкусу. Для того, чтобы в проект добавить форму, надо из контекстного меню в Менеджере проектов выбрать пункт "Вставить"-"UserForm". Будет создано пустое диалоговое окно, в которое можно поместить кнопки, картинки, текст и др. Пример сложной пользовательской формы — на рис. 1.6.
Рис. 1.6. Пример сложной пользовательской формы
5. «Ссылки». Программы могут запускаться на выполнение не только в результате действий пользователя, но и в результате вызова из другой программы. Однако запустить программу можно только из загруженного в Word проекта (шаблона или документа). Если постоянно загружать проект нецелесообразно (например, подобный вызов используется достаточно редко), то для запуска из загруженного проекта программы из другого, незагруженного шаблона нужно поставить на него ссылку (делается это путем простого перетаскивания иконки шаблона в окно Менеджера проектов). В таком случае будет возможен доступ ко всем программам в этом шаблоне из программ проекта, в котором находится ссылка.
Средства создания кода
Основным рабочим местом программиста на VBA является окно текста программ и дизайна форм (рис. 1.7). Именно здесь пишется текст программ и разрабатываются диалоговые окна. Для того, чтобы открыть его для какого-либо компонента проекта, надо просто два раза щелкнуть на нем мышью или выбрать из контекстного меню пункт «Программа».
Рис. 1.7. Окно текста программ и дизайна форм. Контекстная подсказка редактора VBA
Для начала написания программы надо в окне модуля или кода формы написать фразу "Sub Уникальное имя программы", после чего Редактор VBA сам добавит фразу "End Sub", и между этими двумя фразами должен заключаться текст основной части программы.
Редактор VBA — очень дружественный редактор. Он постоянно подсказывает программисту, какие параметры имеет та или иная команда, как надо корректно ее написать. Например, если набрать команду MsgBox (эта команда вызывает на экран диалоговое окно, например, такое, как всем известное окошко "Сохранить изменения в документе?") и набрать после нее открывающую круглую скобку, то над курсором сразу же появится подсказка (см. также рис. 1.7.), из которой можно получить информацию о синтаксисе данной команды, то есть о том, как конкретно нужно задавать ее параметры — в данном случае текст окошка, количество кнопок, значок и звук при появлении — в тексте программы.
Язык VBA называется обьектно-ориентированным. Это значит, что очень многие его команды имеют особенный формат, отличный, скажем, от формата языков Basic или Pascal, которые изучались в школах еще 10 лет назад. Типичная команда VBA имеет такой вид: <Обьект>.<Обьект, входящий в первый обьект>.<…>.<Тот обьект, с которым нужно произвести действие>.<Собственно действие>. Иными словами, каждая команда пишется как бы "с конца": вначале определяется то, над чем надо произвести действие — обьект, а затем само действие — метод. Разделителями компонентов команды служат знаки «точка». Вот пример такой команды:
Application.ActiveDocument.PageSetup.Orientation = wdOrientLandscape
Эта команда устанавливает альбомную ориентацию листа в документе. У обьекта Application (то есть приложение, программа, в данном случае — Word) есть подобьект — ActiveDocument (активный документ, а есть еще другие, неактивные документы, тоже загруженные в Word), у этого подобьекта есть подобьект — PageSetup (параметры страницы; а есть еще подобьекты Selection — то, что в данный момент выделено, Characters — все буквы в тексте и др.), у него есть подобьект Orientation (ориентация листа; а есть еще BottomMargin — нижний отступ, LeftMargin — левый отступ и др.), которому присваивается "="значение wdOrientLandscape — то есть альбомная ориентация листа. Такой же вид имеет и команда получения информации об ориентации листа — она будет выглядеть так:
p = Application.ActiveDocument.PageSetup.Orientation
и после ее выполнения значение переменной р будет wdOrientLandscape или wdOrientPortrait соответственно. (Более подробно синтаксис языка VBA будет рассмотрен в следующей главе.)
При написании команд редактор VBA постоянно подсказывает возможные варианты следующего шага. Например, стоит написать в тексте программы слово Application и поставить точку, как сразу появятся возможные варианты продолжения (рис. 1.8).
Рис. 1.8. Редактор VBA может сам предлагать продолжения команды
Можно мышкой выбрать нужный вариант, и он обязательно будет правильным — не в смысле верности алгоритма (это остается на совести программиста), а в смысле соответствия правилам синтаксиса и иерархии обьектов, а также правописания слова. Затем можно вновь поставить точку, и вновь будет выдан список возможных вариантов продолжения.
Есть также команда завершения слова — можно не писать целиком слово Application, а набрать Appli и нажать Ctrl и пробел. Редактор допишет слово до конца сам или предоставит возможность выбора слова, если его однозначно нельзя определить по первым буквам. Он как бы «ведет» программиста по процессу написания программы, позволяя ему сосредоточиться не на банальном синтаксисе, а на решаемой программой проблеме, не держа в памяти правила написания каждой команды.
Даже если программист не воспользуется предоставляемой подсказкой и введет всю команду вручную, то редактор не даст ему так просто двинуться дальше, если в элементарном синтаксисе данной команды будет ошибка, выдав сообщение "Ошибка компиляции" (рис. 1.9).
Рис. 1.9. Ошибка компиляции
Редактор, безусловно, не может найти ошибку, если неверен алгоритм программы — это уже дело программиста. Он не увидит ошибку и в неправильно написанном слове команды, так как посчитает тогда ее функцией — новой командой, созданной самим программистом. Но вот неправильно написанную известную ему команду отследить он может. (В приведенной на рисунке примере программист хотел заменить выделенный текст новым, написав Selection.Text:="Новый текст", но ошибся и не поставил знак двоеточия в операторе присваивания — ":=".)
Другим серьезным достоинством редактора VBA является наличие прекрасной справочной системы. Поставив курсор на любую команду или название обьекта VBA и нажав клавишу F1, можно получить подробную справку о том, зачем нужна эта команда, каков ее синтаксис и даже посмотреть пример ее использования и скопировать его себе, если необходимо. В справке VBA очень часто приводятся фрагменты кода программ, иллюстрирующие использование той или иной команды. Их можно копировать в свою программу и изменить так, как необходимо.
Подобная дружественность редактора VBA дает прекрасную возможность для самостоятельного изучения этого языка программирования. А в сочетании с средством записи макросов она практически делает ненужными огромные учебники. Достаточно записать пару макросов, с помощью справки изучить назначение каждой записанной команды, и уже можно начинать писать простейшие работающие макросы — редактор не даст ошибиться в грамматике. Надо лишь усвоить некоторые приемы анализа программного кода, о которых пойдет речь в дальнейшем.
Поставив перед любой командой знак апострофа (), можно ее закомментировать — то есть исключить из выполнения. В этом случае VBA не будет ее выполнять. Кроме того, после знака апострофа можно написать пояснения к соответствующей части программы для себя и других программистов. Все комментарии отображаются в редакторе VBA зеленым цветом.
Щелкнув два раза на названии формы, можно открыть окно Дизайна форм (рис. 1.10).
Рис. 1.10. Окно Дизайна форм.
Нажав на соответствующий элемент (кнопку, поле ввода, переключатель и др.) на панели инструментов "Элементы «управления» и нарисовав затем мышкой этот элемент на поле формы, можно поместить его на форму. Двойной щелчок на помещенном на форму элементе открывает окно программ пользовательской формы, где можно написать программу, которая будет выполняться при этом самом двойном щелчке на элементе. (Можно также выбрать другие действия, которые надо выполнить пользователю или другим программам, чтобы запустить такую программу, — события.) У каждой формы есть окно ее программ — реакций элементов на события, хотя оно может быть и пустым. Вызвать его можно пунктом «Программа» из контекстного меню названия формы в Менеджере проектов.