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

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

Чтобы запустить из Visual Basic программу, следует нажать клавишу . Если при ее выполнении обнаружатся ошибки в записи или обращении к неизвестным командам, то появится сообщение о том, что команда редактору неизвестна и надо изменить (исправить) текст программы.

Если после неправильного использования команд Word возникает ошибка, то Visual Basic в диалоговом окне кратко опишет ее. Так, при попытке выделить в документе жирным шрифтом несуществующее десятимиллионное слово, будет выдано соответствующее сообщение.

В последнем диалоговом окне, указав на кнопку «Отладка», можно перейти в специальный режим (также это можно сделать, установив курсор внутри программы и нажав клавишу , где программа исполняется построчно и видны значения всех ее переменных).

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

В режиме отладки доступно следующее.

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

2. Просмотр значений переменных. Подведя курсор в режиме отладки к имени любой переменной, можно увидеть ее значение. А значения их всех имеются в окне «Локальные переменные».

3. Точки останова. Если программа большого объема, то перемещаться по всем ее строчкам с помощью кнопки довольно обременительно. Лучше использовать точки останова, т. е. те отметки в тексте программы, где ее исполнение остановится, а она сама перейдет в режим отладки. Чтобы установить такую точку, следует щелкнуть кнопкой мыши в левом сером поле окна модуля — тогда появится коричневая строка с кружком на нужном месте.

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

4. Окно контрольного значения. В этом окне можно задать определенное выражение, значение которого будет подсчитываться при выполнении программы. Кроме того, выделив в режиме отладки какое-либо выражение и нажав комбинацию клавиш +, можно увидеть его значение, а также добавить это выражение в окно контрольного значения и отслеживать, как оно будет изменяться. Это необходимо, например, при отладке программы с множеством арифметических выражений, одно из которых выдает ошибку. С помощью этого окна можно отследить, при изменении какого параметра значение выражения станет неприемлемым.

5. Окно проверки или отладки. В данное окно можно попасть, выбрав пункты «Вид?Окно отладки». Если в текст программы вставить специальную команду — Debug. Print (в частности a+b), то при выполнении последней в окне отладки будет находиться то, что задано в параметрах команды.

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

6. Стек вызова. Здесь отображается структура программы (она состоит из нескольких подпрограмм — процедур или функций) и показываются переходы между ее подпрограммами.

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

В любой момент можно прервать работу макрокоманды, нажав клавиши +. Затем можно перейти в режим отладки или окончания работы. Если требуется выйти из режима отладки, следует выбрать из меню «Запуск» функцию «Сброс» или нажать на панели «Отладка» кнопку «Сброс».

Чтобы выполнение программы началось с какой-либо команды, надо в режиме отладки просто перетащить мышью по серой полосе слева на требуемое место указатель в виде желтой стрелки. Если при просмотре текста вы забыли, где программа была остановлена, то выберите из меню «Отладка» команду «Показать следующую инструкцию». Помните, всегда можно получить подробную справку по любой команде, поставив на нее курсор и нажав клавишу .

Настройка вызова программы

Когда программа написана и отлажена, необходимо придать ей «товарный вид» — убрать лишние команды и модули, сформировать способ вызова программы — создать кнопки, пункты меню или даже панель инструментов.

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

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

Далее следует создать документ с программой. Образовывается пустой документ нужного формата, в который с помощью диалогового окна Word «Организатор» («Сервис?Макрос?Макросы?Организатор» или «Сервис?Шаблоны и надстройки?Организатор») копируются все готовые компоненты программы из шаблона или документа, где велась разработка. Полученный документ сохраняется под уникальным именем.

И наконец, разрабатывается способ вызова программы. Можно с помощью диалогового окна «Сервис?Настройка?Команды? Макросы» простым перетаскиванием назначить макросу пункт меню или кнопку на стандартной панели инструментов и там же для его вызова — комбинацию клавиш. Однако, видимо, лучше будет создать новую панель инструментов и разместить на ней кнопки вызова макросов. Все изменения нужно сохранять в документе с макросами, а не в шаблоне Normal.dot (или где-нибудь еще).

В диалоговом окне «Настройка» («Сервис?Настройка?Команды? Макросы») название каждого макроса отображается так: сначала пишется имя проекта (его можно посмотреть и изменить в окне свойств Visual Basic, выделив мышью название нужного проекта), затем имя модуля этого проекта (его тоже можно изменить в окне свойств, выделив мышью название модуля), а затем собственно имя макроса (то, что стоит после команды начала программы Sub).

Назначить кнопку или сочетание клавиш для вызова формы невозможно, поэтому следует вставить команду вызова формы («ИмяФормы.Show») в текст программы в модуле и уже затем назначить сочетание клавиш или кнопку для вызова именно этой программы.

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

Надо помнить, что при подведении курсора мыши к кнопке, вызывающей макрос, отображается контекстная подсказка с названием макроса — оно берется после команды начала программы Sub, и потому ему следует давать осмысленное имя. Однако если макрос назван по-русски, то в нелокализованных версиях Word он не будет вызываться кнопкой, созданной в русской версии.

Набор значков для кнопок, вызываемый из меню «Выбрать значок для кнопки» в режиме настройки панелей, весьма ограничен. Тем не менее ничто не мешает с помощью команд того же меню скопировать значок с любой кнопки другой панели или создать его во встроенном редакторе. Кроме того, красивые значки можно извлечь из «недр» Word, введя в окне отладки команду:

CommandBars(?имя существующей
 панели инструментов?). Controls.
.Add(Type:=msoControlButton, 
ID:=797).FaceId = x,

где х — любое число от 1 до 3000. Тогда на указанной в команде панели будет создана кнопка со значком, который можно скопировать на свою кнопку. Поскольку для всех кодов есть значки, иногда созданная таким образом кнопка может оказаться пустой, и нужно проделать операцию еще раз с другим значением х.

Если для вызова макроса выбрать панель инструментов с кнопками, то по окончании работы над ней стоит повторить процесс создания нового документа и снова скопировать туда все компоненты программы вместе с панелью. Это позволит существенно уменьшить размер файла с программой, так как при редактировании макросов он может увеличиться до двух раз. Это, увы, ошибка Microsoft.

Не стоит забывать и об информативном Руководстве пользователя, особенно если программа будет распространяться через Internet. Лучше всего его оформить в виде отдельного текстового файла.

Продолжение в следующем номере.
Орлов Антон Александрович,
antorlov@inbox.ru,
http://antorlov.chat.ru.