Основные принципы и концепции программирования на языке VBA в Excel

Средства получения справки и отладки программ

Разбить на страницы
Показывать лекцию целиком

Просмотр объектов, их свойств и методов (Object Browser)

Средство или одноименной командой из меню View. Можно нажать клавишу F2.

Окно Object Browser

Окно Object Browser отображает классы, свойства, методы, события и константы объектных библиотек и процедур проекта.

(рис 3.1) Окно Object Browser

Так как в VBA реализована расширенная модель объектов, то сами приложения также являются объектами и доступны в Object Browser.

Окно Object Browser состоит из нескольких панелей (окон), каждая из которых отображает часть результата поиска. Линия разбивки, существующая между панелями этого окна, позволяет изменять их размеры.

Верхняя левая панель содержит раскрывающийся список Projects/Libraries (проекты/библиотеки) с перечнем моделей объектов, доступных для активного проекта.

(рис 3.2) Перечень доступных библиотек и проектов

При выборе значения All Libraries отображаются объекты всех доступных библиотек и проектов. Объект Office содержит объекты, общие для офисных приложений.

После выбора модели объектов в окне классов появляется перечень классов (объектов). Список всегда начинается с класса globals, компоненты которого доступны во всех модулях проекта.

После выделения в окне классов некоторого класса (объекта) в окне справа отображаются компоненты этого класса. В окне описания (нижнее окно) высвечиваются краткие сведения по выделенному компоненту. Если для класса или для компонента класса существует программный код, соответствующая строка выделяется жирным шрифтом.

На рис 3.1 в окне классов отражена модель объектов библиотеки Excel, выделен объект Sheets, в окне компонентов перечислены свойства, методы и события коллекции Sheets и показаны сведения о методе Add этой коллекции.

Компоненты класса обычно упорядочены по алфавиту. Порядок группировки изменяется командой Group Members (Компоненты группы) контекстного меню.

Каждому типу компонента соответствует свой значок. Подробно см. Help, статья "Icons Used in the Object Browser and Code Windows" (значки, используемые в окне просмотра объектов и в окне модуля).

Значки, соответствующие компонентам
Значок Компонент Значок Компонент
Свойства Свойства по умолчанию
Методы Методы по умолчанию
События Константы
Модули Классы
Типы, определяемые пользователем Глобальные объекты
Библиотеки Проекты
Встроенные ключевые слова и типы Сгруппированные константы

Окно описания компонента показывает синтаксис выбранного объекта. Кроме формального описания окно описания обычно содержит гиперссылки, подчеркнутые и выделенные зеленым цветом, нажатие на которые высвечивает статью из Help'а, соответствующую нажатой гиперссылке.

Средство Object Browser не дает представления об иерархии объектов. Детальную информацию о просмотре объектов и их иерархии можно получить в Help.

Панель инструментов Object Browser

- Go Back (Назад) позволяет перейти к объекту, ранее выбранному в списке компонентов класса.
- Go Forward (Вперед) повторяет выбор объектов в списке компонентов класса, если осуществлялся переход назад.
- Copy to Clipboard (Копировать) копирует текст из окна описания после выделения нужного фрагмента, например, имени процедуры со списком формальных параметров, Если фрагмент не выделен, то копируется только название компонента. Допускается перетаскивание мышью текста из окна описания в окно модуля. Можно использовать команду Copy из контекстного меню окна описания.
- View Definition (Описание) помещает курсор в окно описания выделенного класса или компонента.
- Search (Поиск) выполняет поиск библиотек, название компонентов которых соответствует образцу текста в поисковой строке Search Text. В этой строке можно вводить или выбирать искомый текст. Запоминаются значения четырех последних поисковых строк. В строке поиска допускается использование стандартных подстановочных символов. Команда Find Whole Word Only (Только слово целиком) контекстного меню для пиктограммы поиска задает поиск целых слов.

Если поиск произведен успешно, то сведения о найденных компонентах размещаются на панели результатов поиска Search Results. Панель Search Results отображает найденные библиотеки в алфавитном порядке.

- Hide/Show Search Results (скрыть/показать результаты поиска) сворачивает или раскрывает окно результата поиска соответственно.
- Help переключает в Help по VBA на статью о компоненте, расположенном в окне описания.

Выход из Object Browser

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

В списке проектов/библиотек можно выбрать имя нужного проекта, и тогда в окне классов появятся компоненты проекта. Двойной щелчок на имени процедуры или названии модуля (процедурного листа) переводит в редактор VB.

(рис 3.3) Классы и компоненты проекта Project1

Получение справки

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

Внимание:
  • Нажатие клавиши F1 при активном рабочем листе высвечивает Help по MS Excel, а не по VBA.
  • Всегда можно вставить в процедуру приводимые в Help примеры событийных процедур и примеры использования методов и свойств объектов.
  • (рис 3.4) Содержание справочника по Visual Basic для MS Excel

    Все разделы справочника для версии MS Office 2003 разбиты на три книги:

  • Microsoft Excel Visual Basic Reference содержит разделы программирования для объектов MS Excel, в том числе, модель объектов ( Microsoft Excel Object Model ). Из алфавитных перечней объектов, их свойств, методов, событий и пр. можно выйти на соответствующие статьи по использованию объектов и их компонентов;
  • Microsoft Visual Basic Documentation - это документация по языку программирования VBA. Содержит темы, посвященные созданию процедур, редактированию текста процедур, выполнению написанных программ, возможностям отладки. Часть тем посвящена оптимизации программ: использованию массивов, созданию рекурсивных процедур, эффективным способам передачи аргументов и возможностям построения циклов. Документация включает раздел Visual Basic How To, в котором кратко описано, как выполнить то или другое действие с объектом языка или с объектом приложения.
  • Microsoft Office Visual Basic Reference содержит справки по VBA, общие для всех офисных приложений: справки по объектам, модель объектов MS Office ( Microsoft Office Object Model ). Все темы объединены в папки и можно перемещаться на любой уровень иерархии справочника. Например, чтобы посмотреть, как описывать массивы, пройдите по цепочке Microsoft Visual Basic Documentation $$\to$$ Visual Basic Conceptual Topics $$\to$$ Declaring Arrays.
  • Можно возвращаться к просмотренным ранее темам и осуществлять поиск тем.

    (рис 3.5) Результаты поиска темы, посвященной кодовой таблице

    Например, для поиска кодовой таблицы можно задать образец поиска character set. В результате будут доступны статьи по обеим частям кодовой таблицы.

    Интерактивная подсказка

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

    (рис 3.6) Подсказка по типам данных

    Интерактивная подсказка появляется на экране, если установлена опция Auto Quick Info редактора Visual Basic. Нажатие Ctrl-Enter вводит выбранный элемент в строку процедуры.

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

    Ошибки делятся на три категории: ошибки разработки (синтаксические ошибки), ошибки компиляции, ошибки выполнения.

    Синтаксическая ошибка - это нарушение правил языка VBA.

    Это может быть некорректный оператор, неверно введенное имя переменной, если объявление переменных обязательно ( Tools-Options-вкл.Editor -включена опция Require Variable Declaration ), отсутствие разделителей между аргументами, несоответствие открывающих и закрывающих скобок, отсутствие закрывающих операторных скобок ( End If, Next и др.), не уникальное название процедуры и т.п.

    Рекомендуется:
  • включать опцию автоматической проверки синтаксиса - Auto Syntax Check ;
  • пользоваться контекстно-зависимой подсказкой, которая возникает при наборе имен объектов, их свойств или методов и которая устанавливается опцией Auto Quick info ;
  • выполнять правила синтаксиса при записи функций и конструкций языка. Для уточнения этих правил в окне программы можно выделить ключевое слово, оператор, функцию, объект, его свойство или метод и нажать клавишу F1. Появится окно справочной системы, которое соответствует выделенному фрагменту кода и показывает допустимую форму записи оператора.
  • При наборе текста процедур некорректный оператор выделяется цветом (по умолчанию красным) и причина возникновения ошибки поясняется сообщением. Невозможно запустить процедуру, если в какой-нибудь процедуре любого открытого проекта обнаружена синтаксическая ошибка.

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

    На этапе выполнения программы выявляются ошибки, которые не могли быть обнаружены редактором Visual Basic ( ошибки выполнения ).

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

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

    Во время выявления какой-нибудь ошибки происходит прерывание программы, если на вкладке General (Общие) диалогового окна Options установлена опция Break on All Errors (Останов при любой ошибке).

    При прерывании программы возникает диалоговое окно, нажатие кнопки Debug в этом диалоговом окне переводит программу в режим отладки. Оператор, на котором произошло прерывание (в котором возникла ошибка), подсвечивается.

    Окна отладчика

    Процесс проверки работоспособности программы носит название "отладка" или "тестирование".

    Для отладки процедур используются различные приемы:

  • прерывание программы в заданной точке (контрольная точка - Breakpoint ) или при выполнении некоторого условия;
  • выполнение программы по шагам (по операторам) - Step ;
  • отслеживание значений переменных или свойств объектов (контрольные значения) - Watch ;
  • изменение значений переменных вручную;
  • редактирование текста программы в режиме прерывания;
  • продолжение выполнения программы, начиная с некоторого оператора и т.п.
  • Если ошибка очевидна, то можно исправить ее, прекратив выполнение программы. Происходит переход в режим конструктора, в котором вносятся изменения в программу. Затем можно запустить программу заново. При перезапуске программа вновь возвращается к начальному состоянию, восстанавливаются исходные значения всех переменных и из памяти удаляются все приостановленные процедуры.

    В режиме отладки программы можно продолжить или прервать выполнение программы, используя кнопкииили соответствующие команды меню Run. Можно выполнять программу по шагам.

    При корректировке текста программы в режиме прерывания редактор VB иногда выдает сообщение о невозможности продолжения программы.

    Если Вы не уверены в том, как будет выполняться исправляемая команда, то

    Рекомендуется:
  • перейти в окно Immediate Window ;
  • скопировать в него или заново набрать в нем нужную команду;
  • выполнить ее.
  • В режиме прерывания в этом окне будут доступны те же переменные, которые были доступны выполняемой процедуре в момент прерывания программы. Так как операторы, введенные в окне Immediate Window, не сохраняются после завершения работы с MS Excel. Если они должны быть сохранены, то их необходимо скопировать в программу.

    Immediate Window (окно проверки)

    Это окно (часто используется термин "оперативная панель") имеет две основные функции:

  • выполнение команд;
  • распечатка значений переменных или выражений во время выполнения процедур (одна из возможностей отладки программ).
  • Окно проверки используется для следующих целей:

  • отображения информации, получаемой в результате выполнения команд процедуры (отладочная печать);
  • тестирования команд, вводимых непосредственно в этом окне;
  • получения или изменения значений переменных;
  • получения или изменения значений свойств объектов, доступных в выполняемой процедуре.
  • Чтобы вывести на экран окно отладки, выберите команду Immediate Window в меню View или нажмите клавиши Ctrl+G.

    Замечание:
  • Операторы, вводимые в окне проверки, выполняются в контексте, т.е. так, как если бы они вводились в выполняемую процедуру.
  • Окно открывается командой Immediate Window меню View (клавиши Ctrl+G ) и закрывается только щелчком на кнопку закрытия окна.

    Важно:
  • Окно Immediate полезно при вводе однострочных команд.
  • Для вычислений в этом окне используйте знак вопроса (?) или оператор Print перед рассчитываемым выражением,
  • Любой оператор, записанный в строке окна или скопированный в это окно из текста процедуры, будет выполнен после нажатия клавиши (рис 3.7) Прерывание программыНа рис 3.7 в первой строке панели Immediate записана команда расчета произведения чисел 6 и 5, результат которого 30 виден во второй строке.

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

    В пятой строке расположен оператор присваивания, скопированный из этой же процедуры в режиме пошагового выполнения процедуры Circle_sq. После нажатия клавиши Enter на панели Immediate не появляется результат расчета, но при установке курсора на название вычисляемой переменной (s) высвечивается вычисленное значение.

  • Если в коде программы встречается ).(рис 3.8) Вывод в окне Immediate значений переменных s1 и n
  • Команды (операторы), введенные в этом окне, можно неоднократно повторять. Используйте линейку прокрутки для просмотра содержимого окна. Достаточно установить точку вставки на нужную строку и нажать Enter. Выбранный оператор повторно выполнится. Набранную ранее команду можно предварительно откорректировать. Повторять ранее введенные команды можно в любом порядке.
  • Примеры

    Оператор ? 355/113 рассчитает приблизительное значение числа pi.

    Оператор Debug.Print "value of a ",a, расположенный в теле процедуры, распечатает указанный текст и значение переменной a на одной строке.

    Окно значения переменной

    Если в программе установлена контрольная точка, то можно просмотреть значения переменных. Достаточно подвести курсор (рис 3.9) к идентификатору переменной внутри выполняемой процедуры и рядом с текстовым курсором появится текущее значение этой переменной как контекстная подсказка.

    (рис 3.9) Окно значения переменной показывает значение переменной Var_A, равное 2

    Locals Window (окно локальных переменных)

    Окно локальных переменных отображает все описанные в текущей процедуре переменные и их значения. Окно высвечивается командой Locals Window из меню View.

    (рис 3.10) Окно локальных переменных

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

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

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

    На рис 3.10 переменная Модуль1 развернута и в окне показаны переменные, объявленные в области описаний модуля.

    В столбце Value (Значение) можно изменять значения переменных. Курсор, установленный на значении переменной, принимает форму текстового курсора. Введите новое значение и для сохранения модифицированного значения нажмите любую из клавиш Enter, Up, Down, Tab, Shift+Tab или щелкните левой кнопкой внутри окна Locals.

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

    Например, при вводе нуля в переменную типа Date значение заменится на 0:00:00. При вводе даты в переменную Integer может произойти ошибка Overflow, а введенное в переменную Integer символьное значение заменится на нуль.

    В столбце Type (Тип) окна Locals отражаются типы переменных. Данные в этом столбце не редактируются.

    В первой строке окна (см. рис 3.10). Высвечивается окно стека вызовов ( Call Stack ), в котором надо выбрать нужную процедуру и нажать кнопку Show (Показать).

    (рис 3.11) Окно стека вызовов процедур

    На рис 3.11 показано окно стека с двмя процедурами, запущенными в следующей последовательности: отражает значения переменных, доступных выбранной в этом окне процедуре Value_A.

    Окно контрольных значений (Watches)

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

    Определяемое пользователем контрольное выражение позволяет следить в процессе пошагового выполнения программы за изменением значения этого выражения.

    Чтобы определить новое контрольное выражение, выполните команду

    (рис 3.12) Добавление нового контрольного значения

    Вводимое в строку ) выражение может быть переменной, свойством или любым другим допустимым в Visual Basic выражением. Если в окне модуля перед выполнением команды Add Watch было выделено некоторое выражение, то оно автоматически отображается в строке Expression.

    Допускается перетаскивание мышью выделенного выражения из окна модуля в окно контрольных значений Watches.

    Контекст контрольного выражения ( Context ) - это область определения контрольного выражения:·поле Procedure отображает имя процедуры, в которой вычисляется введенное выражение. Допускается выбор всех процедур модуля либо отдельной процедуры.

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

    Строка Project отображает имя текущего проекта. Вычисление выражений вне текущего проекта невозможно.

    Замечание:
  • При выборе контекста контрольного выражения всегда следует задавать самую узкую область определения вычисляемого выражения, удовлетворяющую поставленной задаче. Выбор всех процедур или всех модулей может значительно замедлить выполнение, поскольку контрольное выражение вычисляется после выполнения каждой инструкции.
  • В области Watch Type (Тип контрольного значения) можно задать реакцию Visual Basic на значение контрольного выражения:

  • Watch Expression (Контрольное выражение) отображает в окне контрольных значений заданное выражение и его значение.
  • Break When Value is True (Останов, если значение выражения истинно) - выполнение программы автоматически прерывается, когда значение выражения становится истинным или ненулевым (недопустимо для строковых выражений).
  • Break When Value Changes (Останов при изменении значения выражения) - выполнение программы автоматически прерывается при изменении значения выражения в указанном контексте.
  • Введенное выражение и его значение отображаются в окне ).

    (рис 3.13) Окно контрольных значений

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

    Команда Edit Watch (Изменить контрольное значение) из меню Debug позволяет отредактировать или удалить контрольное выражение.

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

    Окно диалога )похоже на окно Функциональные клавиши Ctrl+W.

    (рис 3.14) Добавление контрольного выражения

    Команда Quick Watch (Контрольное значение) из меню Debug выводит окно диалога Quick Watch с текущим значением выделенного в тексте процедуры выражения. Эта команда служит для просмотра текущего значения переменной, свойства объекта или другого выражения, для которого не задано контрольное выражение.

    Для добавления просматриваемого в окне ) выражения в список контрольных выражений следует нажать кнопку (рис 3.15) функциональные клавиши Shift+F9.

    Важно:
  • Контрольные выражения не сохраняются вместе с программой.
  • Контрольные точки или точки останова

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

    Для установки контрольной точки переместитесь на нужную строку процедуры и нажмите пиктограммуМожно выполнить команду Debug-Toggle Breakpoint (Отладка-Точка останова) или нажать клавишу F9. Можно сделать щелчок на вертикальную полосу слева от строки процедуры. Строка подсвечивается цветом точки останова ( Breakpoint Text ), задаваемым на вкладке Editor Format команды Tools-Options. Обычно это коричневый цвет.

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

    Если точка останова задана в строке, содержащей несколько операторов, разделенных двоеточием (:), останов происходит в первой инструкции такой строки.

    Если точки останова больше не нужны, их надо снять. Отмена всех точек останова производится командой Clear All Breakpoints (Снять все точки останова) из меню Debug или клавишами Ctrl+Shift+F9. Отменить действие этой команды нельзя.

    Для снятия одной точки останова выполните команду Можно сделать щелчок на установленную точку на вертикальной полосе слева от строки процедуры. Точка останова удаляется и подсветка строки снимается.

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

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

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

    Команды пошагового режима
    Команда Пиктограмма Клавиша Описание
    Step Into Шаг с заходом F8 Последовательное выполнение всех строк программы (вызывающей и вызываемой процедур)
    Step Over Шаг с обходом Shift+F8 Выполнение вызываемой процедуры как одной инструкции. Используется для продвижения по командам вызывающей процедуры без захода внутрь вызываемых процедур
    Step Out Шаг с выходом Ctrl+Shift+F8 Выполнение оставшейся части вызываемой процедуры как одной инструкции с выходом на оператор вызывающей процедуры, непосредственно следующий за вызовом процедуры
    Run to Cursor Выполнить до текущей позиции Ctrl+F8 Выбор оператора останова программы. Используется для продвижения по логическим разделам программы, например, по большим циклам
    Set next Statement Задать следующую инструкцию Ctrl+F9 Изменение порядка выполнения операторов. Используется для повтора команд внутри текущей процедуры, а также для пропуска нежелательных операторов. Достаточно переместить точку вставки на нужную инструкцию и нажать эту пиктограмму. Можно переместить указатель выполняемого оператора (стрелка слева) в нужную строку процедуры. Допускается выбор строки программы, расположенной как до, так и после текущего оператора. Нельзя задать в качестве следующей выполняемой команды оператор в другой процедуре
    Show next Statement Показать следующую инструкцию Подсвечивает следующую по порядку инструкцию

    Перечисленные команды доступны только в режиме отладки.

    Удобно:
  • при трассировке программы видеть на экране одновременно окно программы, окно рабочей книги и другие окна редактора VB. Тогда можно следить за изменениями, происходящими в рабочей книге, в значениях переменных и т.д. Для удобного расположения окон самостоятельно управляйте их размерами и размещением или используйте для этого команды меню Window.
  • Использование объекта Debug

    Объект Debug используется для организации вывода в окно Immediate в режиме выполнения программы. Объект имеет только один метод Print.

    Синтаксис оператора Debug.Print [outputlist]

  • outputlist - список распечатываемых переменных или выражений, указывать необязательно. Если аргумент опущен, выводится пустая строка.
  • Ссылка на объект Debug является обязательной.
  • Данные отображаются в окне Immediate с учетом национальной настройки, т.е. используется соответствующее форматирование. Значения типа Date выводятся в стандартном кратком формате дат, установленном в системе. Логические значения печатаются как True или False.

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

    Страницы:

    Просмотр объектов, их свойств и методов (Object Browser)

    Средство или одноименной командой из меню View. Можно нажать клавишу F2.

    Окно Object Browser

    Окно Object Browser отображает классы, свойства, методы, события и константы объектных библиотек и процедур проекта.

    (рис 3.1) Окно Object Browser

    Так как в VBA реализована расширенная модель объектов, то сами приложения также являются объектами и доступны в Object Browser.

    Окно Object Browser состоит из нескольких панелей (окон), каждая из которых отображает часть результата поиска. Линия разбивки, существующая между панелями этого окна, позволяет изменять их размеры.

    Верхняя левая панель содержит раскрывающийся список Projects/Libraries (проекты/библиотеки) с перечнем моделей объектов, доступных для активного проекта.

    (рис 3.2) Перечень доступных библиотек и проектов

    При выборе значения All Libraries отображаются объекты всех доступных библиотек и проектов. Объект Office содержит объекты, общие для офисных приложений.

    После выбора модели объектов в окне классов появляется перечень классов (объектов). Список всегда начинается с класса globals, компоненты которого доступны во всех модулях проекта.

    После выделения в окне классов некоторого класса (объекта) в окне справа отображаются компоненты этого класса. В окне описания (нижнее окно) высвечиваются краткие сведения по выделенному компоненту. Если для класса или для компонента класса существует программный код, соответствующая строка выделяется жирным шрифтом.

    На рис 3.1 в окне классов отражена модель объектов библиотеки Excel, выделен объект Sheets, в окне компонентов перечислены свойства, методы и события коллекции Sheets и показаны сведения о методе Add этой коллекции.

    Компоненты класса обычно упорядочены по алфавиту. Порядок группировки изменяется командой Group Members (Компоненты группы) контекстного меню.

    Каждому типу компонента соответствует свой значок. Подробно см. Help, статья "Icons Used in the Object Browser and Code Windows" (значки, используемые в окне просмотра объектов и в окне модуля).

    Значки, соответствующие компонентам
    Значок Компонент Значок Компонент
    Свойства Свойства по умолчанию
    Методы Методы по умолчанию
    События Константы
    Модули Классы
    Типы, определяемые пользователем Глобальные объекты
    Библиотеки Проекты
    Встроенные ключевые слова и типы Сгруппированные константы

    Окно описания компонента показывает синтаксис выбранного объекта. Кроме формального описания окно описания обычно содержит гиперссылки, подчеркнутые и выделенные зеленым цветом, нажатие на которые высвечивает статью из Help'а, соответствующую нажатой гиперссылке.

    Средство Object Browser не дает представления об иерархии объектов. Детальную информацию о просмотре объектов и их иерархии можно получить в Help.

    Панель инструментов Object Browser

    - Go Back (Назад) позволяет перейти к объекту, ранее выбранному в списке компонентов класса.
    - Go Forward (Вперед) повторяет выбор объектов в списке компонентов класса, если осуществлялся переход назад.
    - Copy to Clipboard (Копировать) копирует текст из окна описания после выделения нужного фрагмента, например, имени процедуры со списком формальных параметров, Если фрагмент не выделен, то копируется только название компонента. Допускается перетаскивание мышью текста из окна описания в окно модуля. Можно использовать команду Copy из контекстного меню окна описания.
    - View Definition (Описание) помещает курсор в окно описания выделенного класса или компонента.
    - Search (Поиск) выполняет поиск библиотек, название компонентов которых соответствует образцу текста в поисковой строке Search Text. В этой строке можно вводить или выбирать искомый текст. Запоминаются значения четырех последних поисковых строк. В строке поиска допускается использование стандартных подстановочных символов. Команда Find Whole Word Only (Только слово целиком) контекстного меню для пиктограммы поиска задает поиск целых слов.

    Если поиск произведен успешно, то сведения о найденных компонентах размещаются на панели результатов поиска Search Results. Панель Search Results отображает найденные библиотеки в алфавитном порядке.

    - Hide/Show Search Results (скрыть/показать результаты поиска) сворачивает или раскрывает окно результата поиска соответственно.
    - Help переключает в Help по VBA на статью о компоненте, расположенном в окне описания.

    Выход из Object Browser

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

    В списке проектов/библиотек можно выбрать имя нужного проекта, и тогда в окне классов появятся компоненты проекта. Двойной щелчок на имени процедуры или названии модуля (процедурного листа) переводит в редактор VB.

    (рис 3.3) Классы и компоненты проекта Project1

    Получение справки

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

    Внимание:
  • Нажатие клавиши F1 при активном рабочем листе высвечивает Help по MS Excel, а не по VBA.
  • Всегда можно вставить в процедуру приводимые в Help примеры событийных процедур и примеры использования методов и свойств объектов.
  • (рис 3.4) Содержание справочника по Visual Basic для MS Excel

    Все разделы справочника для версии MS Office 2003 разбиты на три книги:

  • Microsoft Excel Visual Basic Reference содержит разделы программирования для объектов MS Excel, в том числе, модель объектов ( Microsoft Excel Object Model ). Из алфавитных перечней объектов, их свойств, методов, событий и пр. можно выйти на соответствующие статьи по использованию объектов и их компонентов;
  • Microsoft Visual Basic Documentation - это документация по языку программирования VBA. Содержит темы, посвященные созданию процедур, редактированию текста процедур, выполнению написанных программ, возможностям отладки. Часть тем посвящена оптимизации программ: использованию массивов, созданию рекурсивных процедур, эффективным способам передачи аргументов и возможностям построения циклов. Документация включает раздел Visual Basic How To, в котором кратко описано, как выполнить то или другое действие с объектом языка или с объектом приложения.
  • Microsoft Office Visual Basic Reference содержит справки по VBA, общие для всех офисных приложений: справки по объектам, модель объектов MS Office ( Microsoft Office Object Model ). Все темы объединены в папки и можно перемещаться на любой уровень иерархии справочника. Например, чтобы посмотреть, как описывать массивы, пройдите по цепочке Microsoft Visual Basic Documentation $$\to$$ Visual Basic Conceptual Topics $$\to$$ Declaring Arrays.
  • Можно возвращаться к просмотренным ранее темам и осуществлять поиск тем.

    (рис 3.5) Результаты поиска темы, посвященной кодовой таблице

    Например, для поиска кодовой таблицы можно задать образец поиска character set. В результате будут доступны статьи по обеим частям кодовой таблицы.

    Интерактивная подсказка

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

    (рис 3.6) Подсказка по типам данных

    Интерактивная подсказка появляется на экране, если установлена опция Auto Quick Info редактора Visual Basic. Нажатие Ctrl-Enter вводит выбранный элемент в строку процедуры.

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

    Ошибки делятся на три категории: ошибки разработки (синтаксические ошибки), ошибки компиляции, ошибки выполнения.

    Синтаксическая ошибка - это нарушение правил языка VBA.

    Это может быть некорректный оператор, неверно введенное имя переменной, если объявление переменных обязательно ( Tools-Options-вкл.Editor -включена опция Require Variable Declaration ), отсутствие разделителей между аргументами, несоответствие открывающих и закрывающих скобок, отсутствие закрывающих операторных скобок ( End If, Next и др.), не уникальное название процедуры и т.п.

    Рекомендуется:
  • включать опцию автоматической проверки синтаксиса - Auto Syntax Check ;
  • пользоваться контекстно-зависимой подсказкой, которая возникает при наборе имен объектов, их свойств или методов и которая устанавливается опцией Auto Quick info ;
  • выполнять правила синтаксиса при записи функций и конструкций языка. Для уточнения этих правил в окне программы можно выделить ключевое слово, оператор, функцию, объект, его свойство или метод и нажать клавишу F1. Появится окно справочной системы, которое соответствует выделенному фрагменту кода и показывает допустимую форму записи оператора.
  • При наборе текста процедур некорректный оператор выделяется цветом (по умолчанию красным) и причина возникновения ошибки поясняется сообщением. Невозможно запустить процедуру, если в какой-нибудь процедуре любого открытого проекта обнаружена синтаксическая ошибка.

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

    На этапе выполнения программы выявляются ошибки, которые не могли быть обнаружены редактором Visual Basic ( ошибки выполнения ).

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

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

    Во время выявления какой-нибудь ошибки происходит прерывание программы, если на вкладке General (Общие) диалогового окна Options установлена опция Break on All Errors (Останов при любой ошибке).

    При прерывании программы возникает диалоговое окно, нажатие кнопки Debug в этом диалоговом окне переводит программу в режим отладки. Оператор, на котором произошло прерывание (в котором возникла ошибка), подсвечивается.

    Окна отладчика

    Процесс проверки работоспособности программы носит название "отладка" или "тестирование".

    Для отладки процедур используются различные приемы:

  • прерывание программы в заданной точке (контрольная точка - Breakpoint ) или при выполнении некоторого условия;
  • выполнение программы по шагам (по операторам) - Step ;
  • отслеживание значений переменных или свойств объектов (контрольные значения) - Watch ;
  • изменение значений переменных вручную;
  • редактирование текста программы в режиме прерывания;
  • продолжение выполнения программы, начиная с некоторого оператора и т.п.
  • Если ошибка очевидна, то можно исправить ее, прекратив выполнение программы. Происходит переход в режим конструктора, в котором вносятся изменения в программу. Затем можно запустить программу заново. При перезапуске программа вновь возвращается к начальному состоянию, восстанавливаются исходные значения всех переменных и из памяти удаляются все приостановленные процедуры.

    В режиме отладки программы можно продолжить или прервать выполнение программы, используя кнопкииили соответствующие команды меню Run. Можно выполнять программу по шагам.

    При корректировке текста программы в режиме прерывания редактор VB иногда выдает сообщение о невозможности продолжения программы.

    Если Вы не уверены в том, как будет выполняться исправляемая команда, то

    Рекомендуется:
  • перейти в окно Immediate Window ;
  • скопировать в него или заново набрать в нем нужную команду;
  • выполнить ее.
  • В режиме прерывания в этом окне будут доступны те же переменные, которые были доступны выполняемой процедуре в момент прерывания программы. Так как операторы, введенные в окне Immediate Window, не сохраняются после завершения работы с MS Excel. Если они должны быть сохранены, то их необходимо скопировать в программу.

    Immediate Window (окно проверки)

    Это окно (часто используется термин "оперативная панель") имеет две основные функции:

  • выполнение команд;
  • распечатка значений переменных или выражений во время выполнения процедур (одна из возможностей отладки программ).
  • Окно проверки используется для следующих целей:

  • отображения информации, получаемой в результате выполнения команд процедуры (отладочная печать);
  • тестирования команд, вводимых непосредственно в этом окне;
  • получения или изменения значений переменных;
  • получения или изменения значений свойств объектов, доступных в выполняемой процедуре.
  • Чтобы вывести на экран окно отладки, выберите команду Immediate Window в меню View или нажмите клавиши Ctrl+G.

    Замечание:
  • Операторы, вводимые в окне проверки, выполняются в контексте, т.е. так, как если бы они вводились в выполняемую процедуру.
  • Окно открывается командой Immediate Window меню View (клавиши Ctrl+G ) и закрывается только щелчком на кнопку закрытия окна.

    Важно:
  • Окно Immediate полезно при вводе однострочных команд.
  • Для вычислений в этом окне используйте знак вопроса (?) или оператор Print перед рассчитываемым выражением,
  • Любой оператор, записанный в строке окна или скопированный в это окно из текста процедуры, будет выполнен после нажатия клавиши (рис 3.7) Прерывание программыНа рис 3.7 в первой строке панели Immediate записана команда расчета произведения чисел 6 и 5, результат которого 30 виден во второй строке.

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

    В пятой строке расположен оператор присваивания, скопированный из этой же процедуры в режиме пошагового выполнения процедуры Circle_sq. После нажатия клавиши Enter на панели Immediate не появляется результат расчета, но при установке курсора на название вычисляемой переменной (s) высвечивается вычисленное значение.

  • Если в коде программы встречается ).(рис 3.8) Вывод в окне Immediate значений переменных s1 и n
  • Команды (операторы), введенные в этом окне, можно неоднократно повторять. Используйте линейку прокрутки для просмотра содержимого окна. Достаточно установить точку вставки на нужную строку и нажать Enter. Выбранный оператор повторно выполнится. Набранную ранее команду можно предварительно откорректировать. Повторять ранее введенные команды можно в любом порядке.
  • Примеры

    Оператор ? 355/113 рассчитает приблизительное значение числа pi.

    Оператор Debug.Print "value of a ",a, расположенный в теле процедуры, распечатает указанный текст и значение переменной a на одной строке.

    Окно значения переменной

    Если в программе установлена контрольная точка, то можно просмотреть значения переменных. Достаточно подвести курсор (рис 3.9) к идентификатору переменной внутри выполняемой процедуры и рядом с текстовым курсором появится текущее значение этой переменной как контекстная подсказка.

    (рис 3.9) Окно значения переменной показывает значение переменной Var_A, равное 2

    Locals Window (окно локальных переменных)

    Окно локальных переменных отображает все описанные в текущей процедуре переменные и их значения. Окно высвечивается командой Locals Window из меню View.

    (рис 3.10) Окно локальных переменных

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

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

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

    На рис 3.10 переменная Модуль1 развернута и в окне показаны переменные, объявленные в области описаний модуля.

    В столбце Value (Значение) можно изменять значения переменных. Курсор, установленный на значении переменной, принимает форму текстового курсора. Введите новое значение и для сохранения модифицированного значения нажмите любую из клавиш Enter, Up, Down, Tab, Shift+Tab или щелкните левой кнопкой внутри окна Locals.

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

    Например, при вводе нуля в переменную типа Date значение заменится на 0:00:00. При вводе даты в переменную Integer может произойти ошибка Overflow, а введенное в переменную Integer символьное значение заменится на нуль.

    В столбце Type (Тип) окна Locals отражаются типы переменных. Данные в этом столбце не редактируются.

    В первой строке окна (см. рис 3.10). Высвечивается окно стека вызовов ( Call Stack ), в котором надо выбрать нужную процедуру и нажать кнопку Show (Показать).

    (рис 3.11) Окно стека вызовов процедур

    На рис 3.11 показано окно стека с двмя процедурами, запущенными в следующей последовательности: отражает значения переменных, доступных выбранной в этом окне процедуре Value_A.

    Окно контрольных значений (Watches)

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

    Определяемое пользователем контрольное выражение позволяет следить в процессе пошагового выполнения программы за изменением значения этого выражения.

    Чтобы определить новое контрольное выражение, выполните команду

    (рис 3.12) Добавление нового контрольного значения

    Вводимое в строку ) выражение может быть переменной, свойством или любым другим допустимым в Visual Basic выражением. Если в окне модуля перед выполнением команды Add Watch было выделено некоторое выражение, то оно автоматически отображается в строке Expression.

    Допускается перетаскивание мышью выделенного выражения из окна модуля в окно контрольных значений Watches.

    Контекст контрольного выражения ( Context ) - это область определения контрольного выражения:·поле Procedure отображает имя процедуры, в которой вычисляется введенное выражение. Допускается выбор всех процедур модуля либо отдельной процедуры.

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

    Строка Project отображает имя текущего проекта. Вычисление выражений вне текущего проекта невозможно.

    Замечание:
  • При выборе контекста контрольного выражения всегда следует задавать самую узкую область определения вычисляемого выражения, удовлетворяющую поставленной задаче. Выбор всех процедур или всех модулей может значительно замедлить выполнение, поскольку контрольное выражение вычисляется после выполнения каждой инструкции.
  • В области Watch Type (Тип контрольного значения) можно задать реакцию Visual Basic на значение контрольного выражения:

  • Watch Expression (Контрольное выражение) отображает в окне контрольных значений заданное выражение и его значение.
  • Break When Value is True (Останов, если значение выражения истинно) - выполнение программы автоматически прерывается, когда значение выражения становится истинным или ненулевым (недопустимо для строковых выражений).
  • Break When Value Changes (Останов при изменении значения выражения) - выполнение программы автоматически прерывается при изменении значения выражения в указанном контексте.
  • Введенное выражение и его значение отображаются в окне ).

    (рис 3.13) Окно контрольных значений

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

    Команда Edit Watch (Изменить контрольное значение) из меню Debug позволяет отредактировать или удалить контрольное выражение.

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

    Окно диалога )похоже на окно Функциональные клавиши Ctrl+W.

    (рис 3.14) Добавление контрольного выражения

    Команда Quick Watch (Контрольное значение) из меню Debug выводит окно диалога Quick Watch с текущим значением выделенного в тексте процедуры выражения. Эта команда служит для просмотра текущего значения переменной, свойства объекта или другого выражения, для которого не задано контрольное выражение.

    Для добавления просматриваемого в окне ) выражения в список контрольных выражений следует нажать кнопку (рис 3.15) функциональные клавиши Shift+F9.

    Важно:
  • Контрольные выражения не сохраняются вместе с программой.
  • Контрольные точки или точки останова

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

    Для установки контрольной точки переместитесь на нужную строку процедуры и нажмите пиктограммуМожно выполнить команду Debug-Toggle Breakpoint (Отладка-Точка останова) или нажать клавишу F9. Можно сделать щелчок на вертикальную полосу слева от строки процедуры. Строка подсвечивается цветом точки останова ( Breakpoint Text ), задаваемым на вкладке Editor Format команды Tools-Options. Обычно это коричневый цвет.

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

    Если точка останова задана в строке, содержащей несколько операторов, разделенных двоеточием (:), останов происходит в первой инструкции такой строки.

    Если точки останова больше не нужны, их надо снять. Отмена всех точек останова производится командой Clear All Breakpoints (Снять все точки останова) из меню Debug или клавишами Ctrl+Shift+F9. Отменить действие этой команды нельзя.

    Для снятия одной точки останова выполните команду Можно сделать щелчок на установленную точку на вертикальной полосе слева от строки процедуры. Точка останова удаляется и подсветка строки снимается.

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

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

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

    Команды пошагового режима
    Команда Пиктограмма Клавиша Описание
    Step Into Шаг с заходом F8 Последовательное выполнение всех строк программы (вызывающей и вызываемой процедур)
    Step Over Шаг с обходом Shift+F8 Выполнение вызываемой процедуры как одной инструкции. Используется для продвижения по командам вызывающей процедуры без захода внутрь вызываемых процедур
    Step Out Шаг с выходом Ctrl+Shift+F8 Выполнение оставшейся части вызываемой процедуры как одной инструкции с выходом на оператор вызывающей процедуры, непосредственно следующий за вызовом процедуры
    Run to Cursor Выполнить до текущей позиции Ctrl+F8 Выбор оператора останова программы. Используется для продвижения по логическим разделам программы, например, по большим циклам
    Set next Statement Задать следующую инструкцию Ctrl+F9 Изменение порядка выполнения операторов. Используется для повтора команд внутри текущей процедуры, а также для пропуска нежелательных операторов. Достаточно переместить точку вставки на нужную инструкцию и нажать эту пиктограмму. Можно переместить указатель выполняемого оператора (стрелка слева) в нужную строку процедуры. Допускается выбор строки программы, расположенной как до, так и после текущего оператора. Нельзя задать в качестве следующей выполняемой команды оператор в другой процедуре
    Show next Statement Показать следующую инструкцию Подсвечивает следующую по порядку инструкцию

    Перечисленные команды доступны только в режиме отладки.

    Удобно:
  • при трассировке программы видеть на экране одновременно окно программы, окно рабочей книги и другие окна редактора VB. Тогда можно следить за изменениями, происходящими в рабочей книге, в значениях переменных и т.д. Для удобного расположения окон самостоятельно управляйте их размерами и размещением или используйте для этого команды меню Window.
  • Использование объекта Debug

    Объект Debug используется для организации вывода в окно Immediate в режиме выполнения программы. Объект имеет только один метод Print.

    Синтаксис оператора Debug.Print [outputlist]

  • outputlist - список распечатываемых переменных или выражений, указывать необязательно. Если аргумент опущен, выводится пустая строка.
  • Ссылка на объект Debug является обязательной.
  • Данные отображаются в окне Immediate с учетом национальной настройки, т.е. используется соответствующее форматирование. Значения типа Date выводятся в стандартном кратком формате дат, установленном в системе. Логические значения печатаются как True или False.

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

    Вернуться к учебному плану