Будь умным!


У вас вопросы?
У нас ответы:) SamZan.net

Средства программирования на VBA

Работа добавлена на сайт samzan.net: 2015-07-10

Поможем написать учебную работу

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

Предоплата всего

от 25%

Подписываем

договор

Выберите тип работы:

Скидка 25% при заказе до 21.5.2024

Средства программирования на VBA

*       *       *

В отличие от других средств разработки программного обеспечения, где единственным способом создания новой программы является написание ее кода и создание в визуальных редакторах диалоговых окон или использование уже готовых фрагментов кода других программ, в Visual Basic for Applications есть уникальное средство разработки, не присутствующее более нигде и позволяющее быстро научиться создавать простые макросы для Word, Excel и PowerPoint  даже без использования учебников, описаний языка и даже чтения Справочной системы. Это средство - так называемая "запись макросов". При работе в любом из вышеперечисленных компонентов Microsoft Office можно включить специальный режим записи макросов, и тогда все действия пользователя в редакторе будут автоматически "переводиться" на язык Visual Basic for Applications и записываться в виде текста программы. Этот текст можно потом изучить для выяснения синтаксиса и устройства языка, а также необходимым образом его модифицировать. Разумеется, отнюдь не все возможности Visual Basic for Applications реализуются простой записью действий пользователя, однако для простых макрокоманд и для обучающих целей этого средства хватит.

В Microsoft Word для записи макроса надо выбрать из меню "Сервис" пункт "Макросы", а затем из выпадающего подменю - пункт "Начать запись" (рис. 3.1).

03_01.bmp

Рис. 3.1. Запись макроса

Документы Microsoft Word - собственно документы с расширением ".doc" и шаблоны документов с расширением ".dot" - устроены так, что могут хранить в себе программы на Visual Basic for Applications. Каждую программу, хранящуюся в документе Word, может вызывать на исполнение либо кнопка на панели инструментов, либо сочетание клавиш, либо пункт меню, либо другая программа (ну и, естественно, выбор этой программы из списка макрокоманд в диалоговом окне "Сервис-Макрос-Макросы". Возможно любое сочетание способов вызовов. Поэтому перед началом записи макроса пользователю предлагается сразу назначить записываемому макросу способ его вызова (рис. 3.2).

03_02.bmp

Рис. 3.2. Назначение макросу способа вызова.

Если на данном этапе для вызова макроса не будет назначена кнопка или сочетание клавиш, то это всегда можно будет сделать впоследствии с помощью диалогового окна "Настройка" (рис. 3.3) так же, как и для любой другой команды Word. Названия макросов, которые могут быть запущены пользователем, перечисляются в разделе "Макросы" этого окна и состоят из названия проекта (обычно совпадает с названием шаблона или документа, в котором макрос содержится), имени модуля и имени макроса в модуле (что это такое - смотрите ниже).

03_03.bmp

Рис. 3.3. Диалоговое окно "Настройка".

После нажатия кнопки "Ок" в окне Word появится панель "Запись макроса" (рис. 3.4).

03_04.bmp

Рис. 3.4. Панель "Запись макроса".

С этого момента все действия пользователя тщательно протоколируются, хотя и с определенными ограничениями - так, в таком режиме невозможно проводить выделение текста мышью (перемещением курсора с нажатой клавишей Shift можно), не работает контекстное меню правой кнопки мыши. Но этих ограничений немного.

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

Пример подробного анализа результатов подобной записи будет показан в следующей части. А сейчас рассмотрим другой, более традиционный способ написания программ на Visual Basic for Applications - посредством Редактора VBA.

Редактор VBA.

Этот редактор вызывается из меню "Сервис"-"Макросы"-"Редактор Visual Basic" или нажатием клавиш Alt-F11. Его внешний вид таков - см. рис. 3.5.

03_05.bmp

Рис. 3.5. Редактор VBA

Стоит сразу сказать об отношениях Редактора VBA и Справочной системы по Visual Basic for Applications с русским языком. Наиболее доброжелательна к русскоязычным пользователям в этом плане была 97-я версия Microsoft Office, в которой как интерфейс Редактора VBA, так и значительная часть Справочной системы по Visual Basic for Applications были переведены на русский язык. Большинство изображений экрана в этой книге сделано именно в русской версии Microsoft Office 97, в частности, для того, чтобы не приходилось переводить надписи на элементах интерфейса. К сожалению, в более новых версиях Microsoft Office их создатели такими вещами, как русификация программистской части этого пакета и тем более Справки ко встроенному языку, решили не заниматься, и в итоге в Microsoft Office 2000 и Microsoft Office XP ни интерфейс Редактора VBA, ни Справочная система по Visual Basic for Applications не русифицированы. Поэтому если для вас восприятие английских названий пунктов меню и чтение Справочной системы на английском языке представляют определенные сложности, то вам лучше начать изучение Visual Basic for Applications именно на основе русской версии Microsoft Office 97, не смущаясь ее устареванием к сегодняшнему дню. В этом случае новые возможности и ограничения более современных версий Microsoft Office вы сможете узнать после, непосредственно при работе с ними.

Для упрощения изложения в дальнейшем тексте будет подразумеваться, что процесс создания программ и изучения языка Visual Basic for Applications проводится в среде Microsoft Word. Поскольку интерфейс Редактора VBA для всех компонентов Microsoft Office одинаков (за исключением Microsoft Access, да и то лишь в 97-й версии пакета), то перейти из среды Word на его использование в остальных компонентах офисного пакета от Microsoft будет нетрудно.

Окно редактора Visual Basic for Applications состоит из следующих частей: Менеджер проектов (в английской версии Редактора VBA - Project Explorer), Окно свойств (в английской версии - Properties Window), Окна текста программ и дизайна форм (Code Window), Окно отладки (Immediate Window), Окно контрольного значения (Watch Window), Окно локальных переменных (Locals Window), Стек вызова (Call Stack), Окно просмотра обьектов (Object Browser). Ниже мы рассмотрим все эти компоненты подробнее.

Программы на Visual Basic for Applications хранятся в документах Microsoft Office. Так, в среде Word, как уже говорилось, они могут находиться в документах и шаблонах Word, а в среде Excel - в книгах с электронными таблицами, создаваемыми в этой программе.

Каждый файл, содержащий макросы, называется проектом. В окне Менеджера проектов (Project Explorer) отображаются названия всех доступных Редактору VBA проектов, в состав которых в Word  входят открытые документы и шаблоны, а также шаблоны, загруженные глобально - через помещение их в папку автозагружаемых файлов Word, с помощью размещения в ней ярлыков на них или с помощью подключения через диалоговое окно "Сервис - Шаблоны и надстройки". Кроме того, при работе в Microsoft Word всегда в этом окне отображается шаблон Normal.dot со всеми макросами, сохраненными в нем (см.рис. 3.6).

03_06.bmp

Рис. 3.6. Менеджер проекта

Щелкнув мышью по знаку "+" слева от названия проекта, можно открыть список имеющихся его компонентов. Однако так можно поступить лишь с проектами, открытыми в Word: шаблон, загруженный глобально, через папку автозагружаемых файлов или путем "подключения" в диалоговом окне "Сервис - Шаблоны и надстройки", так открыть нельзя, - чтобы получить доступ к его коду для редактирования, необходимо открыть его как файл. Иначе при попытке просмотра будет выдано сообщение "Проект недоступен для просмотра" и доступ к коду будет невозможен (рис. 3.7).

03_07.bmp

Рис. 3.7. Запрет доступа к коду шаблона, загруженного глобально

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

В случае попытки открытия запароленного проекта в той же версии Office, что и та, в которой он был создан (или в более современной) пользователю будет выдан запрос на ввод пароля. Если же макросы в запароленном проекте,  созданном в Microsoft Office 2000 или XP, пытаться открыть в более ранней версии Office - Microsoft Office 97, то на экран будет выдано такое же сообщение, как и при попытке просмотреть макросы в загруженном глобально проекте - "Проект недоступен для просмотра" (в английской версии - Project is unviewable). Вызвано это тем, что в новых версиях Office парольная защита от просмотра кода программ на Visual Basic for Applications значительно усовершенствована, в частности, добавлены новые алгоритмы зашифровывания этого кода.

В Microsoft Word компоненты проекта делятся на пять больших категорий:

1. "Microsoft Word обьекты". Здесь имеется только один обьект - называющийся по умолчанию ThisDocument (имя можно изменить). Его контекстное меню, появляющееся при нажатии правой кнопки мыши, выглядит так, как показано на рис. 3.8.

03_08.bmp

Рис. 3.8. Контекстное меню обьекта ThisDocument

При выборе пункта Обьект произойдет переход к соответствующему документу - к его содержимому: тексту, графике (этот пункт недоступен для шаблонов, на которых основаны созданные документы, - в этом случае шаблоны, тот же Normal.dot, открываются как проекты и позволяют изменять содержащиеся в них макросы, но не позволяют редактировать собственно свое содержимое). В документ Microsoft Word можно вставить специальные обьекты - кнопки, поля ввода текста, поля выбора вариантов и др). В этом случае после выбора пункта Программа контекстного меню обьекта ThisDocument можно написать программу, которая будет выполняться при нажатии соответствующей кнопки, введении текста и др. К написанию такой программы можно перейти и из контекстного меню самого специального обьекта - выделив его, нажав правую кнопку и выбрав пункт "Исходный текст".

(В Microsoft Excel в качестве обьектов представлены все листы рабочей книги Excel по отдельности, а также сама книга как целое.)

2. "Модули." Модули - это и есть собственно программы в Word, макросы. Щелкнув два раза мышью на имени модуля, можно получить доступ к тексту программы или начать ее создавать. Программы, записанные пользователем с помощью средства записи макросов, хранятся по умолчанию в модуле NewMacros шаблона Normal.dot.

Для того, чтобы создать новый модуль, необходимо из контекстного меню Менеджере проектов выбрать пункт "Вставить"-"Модуль" (рис. 3.9).

03_09.bmp

Рис. 3.9. Вставка модуля

Для начала написания программы надо в окне программы написать "Sub Имя программы", после чего Редактор VBA сам добавит фразу "End Sub", и между этими двумя фразами должен заключаться текст основной части программы (рис. 3.10).

03_10.bmp

Рис. 3.10. Начало создания программы

3. "Модули класса". 

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

К примеру, надо написать программу, которая работает с электронными версиями классных журналов в школе. В каждом журнале есть множество подразделов: и список учеников, и список их оценок, и система вычисления средней оценки каждого из учеников, и список предметов, и много чего еще… Можно, конечно, на Visual Basic for Applications описать устройство каждого классного журнала: создать списки учеников, организовать таблицы с оценками, но тогда при однотипных действиях с группой журналов (например, надо посчитать средний балл оценок всех учащихся седьмых и восьмых классов) придется включать в код очень много операций с каждым компонентом журнала. Также при добавлении нового журнала придется писать программный код для создания списка учащихся, списка предметов и др. Это все очень усложнит программу и потребует большой затраты труда программиста. Поэтому в Visual Basic for Applications имеется понятие класса - то есть нового типа обьектов, могущих содержать программный код для своей обработки. Так, можно создать класс "Журналы" и описать в его модуле класса содержимое обьектов этого класса: список учеников - (Public Ученики(40) As String), предметов (Public Предметы(20) As String) и др. Теперь для создания нового обьекта класса "Журналы" - нового журнала - не надо заниматься утомительным описанием вновь создаваемых списков учеников и предметов: будет достаточно в одной строчке написать команду "Обьявить новую переменную класса Журналы" (Dim Журнал25 As Журналы) и присвоить нужные значения соответствующим разделам этого новосозданного журнала (Журнал25.Ученики(1)="Андреев" и.т.д.). Теперь можно в модуле класса написать программу вычисления средней оценки всех учащихся, и при необходимости сделать такой подсчет вызывать ее одной командой.

4. "Формы". Формы - это диалоговые окна программ, которые можно разработать по своему вкусу. Для того, чтобы в проект добавить форму, надо из контекстного меню в Менеджере проектов выбрать пункт "Вставить"-"UserForm". Будет создано пустое диалоговое окно, в которое можно поместить кнопки, картинки, текст и др. Пример сложной пользовательской формы - на рис. 3.11.

03_11.bmp

Рис. 3.11. Пример сложной пользовательской формы

Подробнее о формах будет рассказано в следующей главе.

5. "Ссылки". Программы могут запускаться на выполнение не только в результате действий пользователя, но и в результате вызова из другой программы. Однако запустить программу можно только из загруженного в Word проекта (шаблона или документа). Если постоянно загружать проект нецелесообразно (например, подобный вызов используется достаточно редко), то для запуска из загруженного проекта программы из другого, незагруженного шаблона нужно поставить на него ссылку (делается это путем простого перетаскивания иконки шаблона в окно Менеджера проектов). В таком случае будет возможен доступ ко всем программам в этом шаблоне из программ проекта, в котором находится ссылка.

Кроме того, с помощью диалогового окна Редактора VBA "Сервис - Ссылки" можно создать ссылки на различные программные компоненты - библиотеки1. В этом случае у вас появится возможность использовать эти компоненты, не включая их в свою программу, а просто вызвав по имени. (Для создания ссылки на какую-либо библиотеку достаточно поставить галочку против ее названия.) Например, если в какой-нибудь библиотеке содержится программа отображения на экране циферблата часов с определенным временем, то, подключив ее к своей программе - создав на нее ссылку - можно отображать эти часы простым вызовом данной программы (возможно, с определенными параметрами - скажем, временем, которое эти часы должны показывать).

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

Окно текста программ и дизайна форм (Code Window). Это и есть основное рабочее место программиста на Visual Basic for Applications. Именно здесь пишется текст программ и разрабатываются диалоговые окна. Для того, чтобы открыть его для какого-либо компонента проекта, надо просто два раза щелкнуть на нем мышью или выбрать из контекстного меню пункт "Программа".

Редактор Visual Basic for Applications - очень дружественный редактор. Он постоянно подсказывает программисту, какие параметры имеет та или иная команда, как надо корректно ее написать. Например, если набрать команду MsgBox (эта команда вызывает на экран диалоговое окно, например, такое, как всем известное окошко "Сохранить изменения в документе?") и набрать после нее открывающую круглую скобку, то над курсором сразу же появится подсказка (см. рис. 3.12.), из которой можно получить информацию о синтаксисе данной команды, то есть о том, как конкретно нужно задавать ее параметры (в данном случае текст окошка, количество кнопок, значок и звук при появлении) в тексте программы.

03_12.bmp

Рис. 3.12. Контекстная подсказка редактора VBA

Язык Visual Basic for Applications называется обьектно-ориентированнным. Это значит, что очень многие его команды имеют особенный формат, отличный, скажем, от формата Basic или Pascal, которые изучались в школах лет десять назад. Типичная команда Visual Basic for Applications имеет такой вид: <Обьект>.<Обьект, входящий в первый обьект>.<…>.<Тот обьект, с которым нужно произвести действие>.<Собственно действие>. Иными словами, каждая команда пишется как бы "с конца": вначале определяется то, над чем надо произвести действие - обьект, а затем само действие - метод. Разделителями компонентов команды служат знаки "точка". Вот пример такой команды:

Application.ActiveDocument.PageSetup.Orientation = wdOrientLandscape.

Эта команда устанавливает альбомную ориентацию листа в документе. У обьекта Application (то есть приложение, программа, в данном случае - Word) есть подобьект - ActiveDocument (активный документ, а есть еще другие, неактивные документы, тоже загруженные в Word), у этого подобьекта есть подобьект - PageSetup (параметры страницы; а есть еще подобьекты Selection - то, что в данный момент выделено, Characters - все буквы в тексте и др.), у него есть подобьект Orientation (ориентация листа; а есть еще BottomMargin - нижний отступ, LeftMargin - левый отступ и др.), которому присваивается "=" значение wdOrientLandscape - то есть альбомная ориентация листа. Такой же вид имеет и команда получения информации об ориентации листа - она будет выглядеть так:

p = Application.ActiveDocument.PageSetup.Orientation,

и после ее выполнения значение переменной р будет wdOrientLandscape или wdOrientPortrait соответственно. (Более подробно синтаксис языка Visual Basic for Applications будет рассмотрен позже.)

При написании команд редактор Visual Basic for Applications постоянно подсказывает возможные варианты следующего шага. Так, например, стоит написать в тексте программы слово Application и поставить точку, как сразу появятся возможные варианты продолжения (рис. 3.13).

03_13.bmp

Рис. 3.13. Дружественный интерфейс редактора VBA.

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

Есть также команда завершения слова - можно не писать целиком слово Application, а набрать Appli и нажать Ctrl и пробел. Редактор допишет слово до конца сам или предоставит возможность выбора слова, если его однозначно нельзя определить по первым буквам. Он как бы "ведет" программиста по процессу написания программы, позволяя ему сосредоточиться не на банальном синтаксисе языка, а на решаемой программой проблеме, не держа в памяти правила написания каждой команды.

Даже если программист не воспользуется предоставляемой подсказкой и введет всю команду вручную, то редактор не даст ему так просто двинуться дальше, если в элементарном синтаксисе данной команды будет ошибка, выдав сообщение "Ошибка компиляции" (рис. 3.14).

03_14.bmp

Рис. 3.14. Ошибка компиляции.

Редактор, безусловно, не может найти ошибку, если неверен алгоритм программы - это уже дело программиста. Он не увидит ошибку и в неправильно написанном слове команды, так как посчитает тогда ее функцией - новой командой, созданной самим программистом. Но вот неправильно написанную известную ему команду отследить он может. (В приведенной на рисунке примере программист хотел заменить выделенный текст новым, написав Selection.Text="Новый текст", но забыл этот самый новый текст написать.)

Другим серьезным достоинством редактора Visual Basic for Applications является наличие прекрасной справочной системы. Поставив курсор на любую команду или название обьекта Visual Basic for Applications и нажав клавишу F1, можно получить подробную справку о том, зачем нужна эта команда, каков ее синтаксис и даже посмотреть пример ее использования и скопировать его себе, если необходимо (рис. 3.15).

03_15.bmp

Рис. 3.15. Окно справочной системы. Справка по команде Str$().

К сожалению, как уже говорилось, Справка по VBA на русском языке есть лишь в Microsoft Office 97, да и то переведенная часть составляет не очень-то и большую долю от всего ее обьема.

В справке Visual Basic for Applications очень часто приводятся фрагменты кода программ, иллюстрирующие использование той или иной команды. Их можно копировать в свою программу и изменять так, как необходимо.

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

Поставив перед любой командой знак апострофа (') или команду "rem", можно ее закомментировать - то есть исключить из выполнения. В этом случае Редактор VBA не будет ее выполнять. Кроме того, после знака апострофа можно написать пояснения к соответствующей части программы для себя и других программистов.

Все комментарии отображаются в редакторе VBA зеленым цветом.

Щелкнув два раза на названии формы, можно открыть окно Дизайна форм (рис. 3.16.).

03_16.bmp

Рис. 3.16. Окно Дизайна форм.

Нажав на соответствующий элемент (кнопку, поле ввода, переключатель и др.) на панели инструментов "Элементы управления" и нарисовав затем мышкой этот элемент на поле формы, можно поместить его на форму. Двойной щелчок на помещенном на форму элементе открывает окно программ пользовательской формы, где можно написать код, который будет выполняться при этом самом двойном щелчке на элементе. Можно также выбрать другие действия, которые надо выполнить, чтобы запустить такую программу, - события (см.ниже). У каждой формы есть окно ее программ - реакций элементов на события, хотя оно может быть и пустым. Вызвать его можно пунктом "Программа" из контекстного меню названия формы в Менеджере проектов.

Если выбрать какой-нибудь элемент формы и из его контекстного меню выбрать пункт "Свойства" (или нажать клавишу F4), то откроется Окно свойств (Properties Window) - рис. 3.17.

03_17.bmp

Рис. 3.17. Окно свойств элементов формы

Здесь можно задать все доступные свойства каждого элемента, например, его цвет, цвет границы, надпись, состояние - доступно/недоступно для изменений, поместить на элемент картинку из внешнего файла (пункт "Picture"). Все эти свойства также можно задавать программно, однако некоторые, вроде той же картинки, стоит задавать только в этом окне. Для получения подробного описания функции каждого элемента окна свойств (а состав этих элементов различен для каждого элемента формы) достаточно просто поставить на него курсор и нажать F1. Настоятельно рекомендуется подробно изучить предназначение всех элементов данного окна как с помощью вызова справки, так и с помощью изучения изменений в состоянии обьекта после изменения значения свойства.

Окно Просмотр обьектов (Object Browser), вызываемый кнопкой F2 или из меню Вид (рис. 3.18), является кратким справочником по всем возможным свойствам и методам (то есть действиям, командам) обьектов Visual Basic for Applications. Можно посмотреть, какие свойства или методы доступны для каждого обьекта, какие обьекты в принципе существуют в Visual Basic for Applications, вызвать справочный файл для каждого обьекта, свойства или метода.

03_18.bmp

Рис. 3.18. Окно Просмотр обьектов

На панели инструментов "Правка" Редактора VBA имеются соответствующие кнопки для вызова вышеописанных функций. Так, кнопка "Список свойств/методов" позволяет увидеть возможные продолжения любой команды (то же самое можно получить, поставив после команды точку, но так неудобно делать в уже написанном тексте), а кнопка "Сведения" выводит информацию о переменной, которая в данный момент выделена. Как и в самом редакторе Word, в Редакторе VBA можно вставлять закладки в текст программы для более удобного перехода к соответствующим его частям.

Модули, входящие в состав проекта, можно сохранить в текстовом файле. Для этого в Менеджере проектов из контекстного меню правой кнопки мыши соответствующего модуля надо выбрать функцию "Экспорт файла" (рис. 3.19). Модуль будет сохранен в текстовом файле с расширением ".bas". Можно просто перетащить название модуля в окно Проводника, держа нажатой левую кнопку мыши - Редактор VBA поддерживает механизм Drag-and-Drop. Вставить ранее сохраненный модуль можно через команду "Импорт файла" того же меню или путем перетаскивания его иконки в окно Редактора VBA.

03_19.bmp

Рис. 3.19. Экспортирование модуля

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

Отладка программы

Редактор VBA обладает очень большими возможностями отладки программы, то есть поиска в ней алгоритмических и языковых ошибок. Поскольку язык Visual Basic for Applications - не компилируемый, а интерпретируемый (то есть готовая программа представляет собой текст исходного кода, хранящийся в шаблоне или документе, который переводится в машинные коды при каждом ее запуске, в то время как конечный продукт средств создания программ на остальных языках программирования практически всегда представляет собой файл с исполняемым машинным кодом), то после завершения написания кода и успешной его отладки программа готова к использованию.

Для запуска на выполнение готовой или записанной программы из редактора Visual Basic for Applications необходимо нажать клавишу F5 или выбрать соответствующий пункт из меню "Запуск" (в английской версии - Run). Программа начнет выполняться и, если в ней вдруг найдутся ошибки в записи команд или обращения к неизвестным командам, будет выдано соответствующее сообщение (рис. 3.20).

03_20.bmp

Рис. 3.20. Сообщение об ошибке компиляции

Данное сообщение означает, что эта команда редактору Visual Basic for Applications неизвестна. Значит - надо изменить код программы, соответственно исправив его.

(В Visual Basic for Applications можно создавать собственные команды - функции или процедуры, которые могут вызываться так же, как и встроенные. Об этом будет рассказано ниже.)

Если возникает ошибка вследствие неправильного использования команд Word, то редактор Visual Basic for Applications выдает диалоговое окно, в котором приводится некоторое описание ошибки. Так, при попытке выделить жирным шрифтом десятимиллионное слово в документе было выдано сообщение "Запрашиваемый номер семейства не существует" (рис. 3.21), так как десятимиллионного слова в документе не было.

03_21.bmp

Рис. 3.21. Сообщение об ошибке из-за неправильного использования команд VBA

В последнем диалоговом окне, как можно видеть, есть кнопка под названием "Отладка". Нажав на нее, можно перейти в режим отладки программы - то есть специального состояния Редактора Visual Basic for Applications, в котором программа может исполняться построчно, а программист имеет возможность видеть значения всех переменных программы и даже принудительно задавать эти значения. Также в режим отладки можно перейти из Редактора VBA, поставив курсор внутрь программы и нажав клавишу F8.

Если ошибка произошла в макросе, находящемся в недоступном шаблоне (например, загруженным глобально через папку автозагружаемых файлов Word), то кнопка "Отладка" будет неактивна.

В режиме отладки программисту доступны следующие возможности:

Пошаговое исполнение программы. Выполняются все команды последовательно, но выполнение каждой команды требует нажатия кнопки F8. Если программа где-то выдает ошибку алгоритма, то можно посмотреть, на каком конкретно этапе это происходит. При пошаговом исполнении в редакторе подсвечивается желтым цветом команда, которая будет выполнена следующей.

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

03_22.bmp

Рис. 3.22. Просмотр значения переменной в режиме отладки

Кроме того, значения всех переменных программы можно увидеть в окне Локальные переменные (Local Window), рис. 3.23.

03_23.bmp

Рис. 3.23. Окно локальных переменных.

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

Точки останова. Если программа длинная, то проходить по всем ее строчкам с помощью кнопки F8 - занятие не слишком интересное и приятное. В этом случае лучше использовать точки останова: то есть отметки в тексте программы, где ее исполнение должно остановиться, а сама программа - перейти в режим отладки. Для установки точки останова нужно щелкнуть левой кнопкой мыши на сером левом поле окна модуля, и тогда появится коричневая строка с кружочком на месте точки останова (рис. 3.24).

03_24.bmp

Рис. 3.24. Точка останова.

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

Окно контрольного значения (Watch Window). В этом окне можно задать определенное выражение, значение которого будет подсчитываться параллельно с выполнением программы. Кроме того, выделив в режиме отладки какое-нибудь выражение и нажав Shift и F9, можно увидеть его значение, а также добавить это выражение в окно контрольного значения и отслеживать его дальнейшие изменения.

Такая возможность необходима, например, при отладке длинной программы с множеством арифметических выражений, одно из которых дает ошибку. С помощью этого окна можно отследить, когда, при изменении какого параметра значение выражения станет неприемлемым. К примеру, идет вычисление оптимального количества учеников в каждом классе с учетом множества параметров и где-то подозревается наличие ошибки: не сходится сумма количеств всех учеников во всех классах с количеством учеников в школе. Можно, конечно, обойтись без всяких там окон контрольного значения и вставить в текст программы после каждого вычисления проверку равенства суммы количества всех учеников во всех классах с численностью учеников школы, но это очень усложнит программу, да и потом придется удалять все эти добавления, - а если программа большая, то сделать это не так просто. Гораздо лучше поставить контрольное значение - сумму количеств всех учеников во всех классах - и при пошаговом исполнении программы отследить, где, на каком этапе происходит ее ненужное изменение.

Окно проверки или Отладки (Immediate Window). Это окно вызывается из меню Вид - Окно отладки. В текст программы можно вставить специальные команды - Debug.Print (a+b, например). Тогда при выполнении этой команды в Окно отладки будет печататься то, что задано в ее параметрах (рис. 3.25).

03_25.bmp

Рис. 3.25. Окно отладки.

Возможности применения этого окна многообразны. Можно выводить в него сообщения в случае выполнения какого-либо условия. Можно отображать в нем промежуточные результаты вычислений для контроля их правильности - чтобы не смотреть и искать нужное выражение в окнах Локальных переменных или Контрольного значения, а получать их сразу, перед глазами. Можно даже использовать это окно как маленький калькулятор или командную строку (рис. 3.26), и тогда при нажатии Enter после ввода команды она будет тут же выполнена! Надо только перед самой командой писать слово Print, если команда должна выдать какой-нибудь результат в этом же окне.

03_26.bmp

Рис. 3.26. Калькулятор в окне отладки

Стек вызова (Call Stack). В этом окне отображается структура программы, состоящей из нескольких подпрограмм - процедур или функций, а также показывается, какие переходы возможны между этими подпрограммами. Если программа сложная и большая, то разобраться, какая подпрограмма вызывает ту или иную другую подпрограмму, достаточно трудно, - для этого и стоит использовать Стек вызова, в котором все вызовы подпрограмм друг друга наглядно изображены.

Окна Контрольного значения, Локальных переменных, Отладки и Стека вызова могут быть вызваны как из меню Вид или соответствующими сочетаниями клавиш, так и при нажатии кнопок на панели "Отладка". Достаточно только подвести курсор к каждой кнопке панели, чтобы увидеть, какую команду она вызывает.

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

Для выхода из режима отладки до завершения полного выполнения программы необходимо выбрать функцию Сброс из меню Запуск или нажать на панели "Отладка" кнопку "Сброс".

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

И помните, что Вы можете всегда получить подробную справку по любой команде, поставив на нее курсор и нажав клавишу F1.

1 Библиотека - это (в общем случае) файл, содержащий в себе код подпрограмм, используемых другими программами. Библиотеки делаются для того, чтобы несколько программ, которым требуются одни и те же подпрограммы, могли их брать из библиотек и тем самым не содержать их в себе и быть меньшего обьема. Кроме того, библиотека может загружаться в оперативную память лишь при ее вызове из программы и тем самым не загромождать ее, когда содержащиеся в ней функции не нужны.




1. 1 Данные по населённому пункту 1
2. Реферат- Динамика профессионального становления психологов
3. ся главным образом чз сущие в норме анастомозы м-у ветвями различных артериальных стволов т
4. Особенности заготовки сушш и хранения сырья
5. сердцевиной Продукция предприятий машиностроения играет решающую роль в реализации достижений научнотех
6. .П. Драгоманова в контексті соціального і національного розвитку Європейсько відомий український
7. Убийство по неосторожности
8. Азы воспитания подготовка к учебному году задачи на год родительские договора и правила детского
9. Анализ дифференциальных уравнений
10. Защита металлов от коррозии
11. Статья- Фальшивые бизнес идеи
12. БЕЛГОРОДСКИЙ ГОСУДАРСТВЕННЫЙ НАЦИОНАЛЬНЫЙ ИССЛЕДОВАТЕЛЬСКИЙ УНИВЕРСИТЕТ НИУ БелГУ ФАКУЛ
13. Переменная звезда
14. Развитие личности ребенка под влиянием факторов среды
15. а предприятия Состав и структура оборотного капитала предприятия
16. по теме Наследственные отношения в МЧП Дайте один вариант ответа- 1
17. Скажи мне кудесник любимец боговДа будут светлы твои летаЗачем носовых я лишился платковТы Гэндальф отв
18. Практикум по дисциплине Экономика организаций каждая правильно решенная задача оценивается в 5 баллов
19. по глазам в портретной форме
20. Туристичними стежками Мукачівщини