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

Редактор Visual Basic

Показывать лекцию целиком

Редактор Visual Basic позволяет записывать, сохранять и модифицировать программные модули, выполнять и отлаживать процедуры.

В среду редактора VBA можно перейти

  • командой Сервис-Макрос-Редактор Visual Basic,
  • нажав кнопкуна панели инструментов Visual Basic
  • с помощью функциональные клавишей Alt+F11.
  • Возврат в рабочую книгу MS Excel из редактора VBA выполняется

  • командой Microsoft Excel - последней командой меню Вид,
  • нажатием на кнопкустандартной панели инструментов Visual Basic
  • клавишами Alt+F11 или Alt+Q.
  • Запомните, что:
  • Документ MS Excel представляет собой рабочую книгу, содержащую рабочие листы с данными различных типов и формулами, листы диаграмм и программы для обработки данных.
  • Программные компоненты документа (модули, процедуры, формы) объединяются в проект, который сохраняется на диске вместе с документом.
  • Проект на VBA нельзя создать независимо от документа. Каждой рабочей книге соответствует проект с именем, состоящим из двух частей: VBAProject и названия книги в скобках. Такое имя присваивается проекту по умолчанию
  • Окна редактора VB

    Project Window (окно проекта)

    Структура проекта видна в окне проекта редактора ). Основное предназначение окна проекта - обеспечение навигации в проекте.

    (рис 2.1) Окно проекта

    Структура проекта имеет вид дерева. Элементы структуры могут быть свернуты или расширены нажатием на пиктограммы "+" или "-", расположенные слева от папок, составляющих проект.

    Показать окно проекта можно при помощи:

  • нажатия на кнопкупанели инструментов пиктографического меню
  • команды Project Explorer меню View
  • клавишей Ctrl+R.
  • Первоначально проект содержит только одну папку с объектами документа - Microsoft Excel Objects.

    По мере разработки пользовательского приложения добавляются

  • папка Формы (Forms), содержащая строки для каждой формы, созданной пользователем. Это диалоговые окна пользователя - объекты Userform.
  • папка Модули (Modules) со стандартными пользовательскими модулями, не связанными с конкретными объектами или формами.
  • папка Модули класса (Classes) с модулями, определяющими пользовательские классы.
  • папка Ссылки (References) со ссылками на другие проекты.
  • Объекты, соответствующие рабочей книге, ее листам и пользовательским формам, состоят из двух компонент - видимая часть (например, непосредственно рабочий лист) и кодовая часть (процедурный лист).

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

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

  • двойным щелчком на выбранный объект проекта
  • нажатием клавиши F7 на выделенный объект проекта
  • выбором команды Code из меню View или из контекстного меню для выделенного объекта проекта.
  • Стандартные модули содержат:

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

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

    Процедура - это последовательность команд (операторов языка), начинающаяся с оператора Sub и заканчивающаяся оператором End Sub.

    Все операторы, которые заключены между этими двумя операторами, составляют тело процедуры.

    После записи оператора начала процедуры вручную и нажатия клавиши Enter конец процедуры записывается автоматически.

    Для вставки процедуры установите точку вставки в тело модуля и выполните команду Procedure (Процедура) из меню Insert (Вставка).

    ).
  • Процедуры, расположенные на процедурных листах, связанных с объектами рабочей книги или пользовательскими формами, не доступны в этом окне.
  • Properties Window (Окно свойств)

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

    (рис 2.2) Окно свойств объекта Module1

    Если выделен стандартный модуль или проект (рис 2.2), то высвечивается его единственное свойство - Name (имя). Если же выделен, например, объект Userform, то в окне свойств показана таблица с перечнем его свойств.

    Изменение свойства Name приводит к изменению имени объекта, под которым этот объект известен всем процедурам проекта.

    Свойства объектов можно изменять в режиме конструктора ( Design time ) или в режиме выполнения процедуры ( Run time ). Некоторые свойства объектов можно изменять в любом режиме, а отдельные свойства подлежат изменению только в режиме конструктора или только в режиме выполнения процедуры. Если свойства объектов изменяются в режиме выполнения процедуры, то они никогда не видны в окне свойств объекта.

    Code (окно программы)

    Окно открывается при выполнении команды (рис 2.2) или сделать двойной щелчок на имени модуля, объекта рабочей книги или формы.

    Меню и панели инструментов Visual Basic

    При переходе в редактор VB меняется меню и появляется стандартная панель инструментов Visual Basic.

    Пиктограммы отладки программ расположены на отдельной панели инструментов, которая высвечивается командой View-Toolbars-Debug.

    Меню

    (рис 2.3) Меню Visual Basic
  • Команды меню File (Файл) выполняют обычные действия по сохранению рабочей книги, позволяют распечатать лист с процедурами, экспортировать и импортировать модули, формы, классы, закрыть редактор VB и вернуться в таблицу.
  • Команды меню Edit (Правка) служат для редактирования текста процедур (копирования, перемещения и удаления фрагментов кода, поиска и замены текста, отмены последней команды редактирования). Можно просмотреть список свойств и методов, список констант, установить закладки.
  • Команды меню View (Вид) позволяют работать с панелями инструментов, просматривать объекты, переключаться на различные окна и т.д.
  • Пункт Code (Программа) показывает текст модуля или процедурного листа.
  • Пункт Definition (Описание) высвечивает подсказку по ключевому слову, на котором установлена точка вставки.
  • Пункт Object Browser (Просмотр объектов) предназначен для просмотра объектов, их методов и свойств, доступных в разных библиотеках, модулях и пользовательских приложениях (см. Приложение A. Справочная система ).
  • Пункты Immediate Window, Locals Window, Watch Window позволяют просматривать окна редактора. Эти три окна предназначены для модификации переменных и тестирования операторов, для отслеживания значений переменных, для наблюдения за ходом выполнения программы.
  • Пункты Project Explorer, Properties Window позволяют перейти к окну проекта и окну свойств.
  • Запуск процедур и их отладка выполняется командами, которые распределены между тремя меню: Debug (Отладка), Run (Запуск), Tools (Сервис). Подробно см.Лекция 3 Инструментальные средства отладки программ.
  • Пункты Run (Запуск программы), Break (Прервать), Reset (Сброс) служат для выполнения процедуры, для прерывания программы и внесения изменений после прерывания.
  • Пошаговое выполнение процедур производится при помощи команд Step Into (Шаг с заходом), Step Over (Шаг с обходом), Step Out (Шаг с выходом). Описание команд см. в описании аналогичных кнопок панели инструментов Debug.
  • Команды Toggle Breakpoint (Точка останова), Clear All Breakpoints (Снять все точки останова) используются для установки и снятия контрольных точек (точек останова). Пошаговое выполнение неизбежно приводит к потере времени выполнения процедур. Контрольные точки позволяют уменьшить время пошагового выполнения кода. При достижении контрольной точки программа переходит в режим отладки и можно просмотреть значения переменных или сделать дополнительные вычисления.
  • Команды Add Watch (Добавить контрольное значение), Edit Watch (Изменить контрольное значение) дают возможность просматривать значения переменных или выражений, редактировать отслеживаемые выражения. В процессе выполнения программы значения высвечиваются в окне контрольных значений ( Watches ).
  • Команда Quick Watch (Установить контрольное значение) позволяет узнать значение переменной или выражения после прерывания программы.
  • В меню ). Для табличного листа эквивалентная ей команда Макрос разворачивает дополнительный список команд, которые используются для макрорекордера и были подробно разобраны выше.
  • Команда Ссылки (References) служит для связи текущего проекта с другими проектами или библиотеками.
  • Меню Window (Окно) позволяет открыть новое окно, упорядочить открытые окна, разделить активное окно.
  • Меню (рис 2.4) Разделы помощиПри выборе этого пункта доступны разделы помощи (рис 2.4), сгруппированные в трех книгах. Подробно см. Лекцию 3. Справочная система.
  • Панели инструментов

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

    (рис 2.5) View Microsoft Excel - переход на активный лист рабочей книги;
    Insert Userform - вставка объекта Userform (форма);

    Нажатие на стрелку вниз справа от пиктограммы высвечивает дополнительное меню (рис 2.6), в котором можно выбрать вставляемый объект: модуль, процедуру или класс;

    (рис 2.6) Run Macro запускает процедуру, внутри которой установлена точка вставки. Если точка вставка вне процедур или лист с процедурами неактивен, то предлагается выбрать запускаемую процедуру из меню;
    Break Macro приостанавливает работу процедуры или продолжает ее после сделанной паузы;
    Stop Macro прерывает выполнение процедуры;
    Design Mode - вход/выход из режима Конструктора;
    Project Explorer открывает окно проекта;
    Properties Window открывает окно свойств текущего объекта;
    Object Browser - просмотр объектов;
    Toolbox высвечивает панель элементов управления форм.

    Остальные пиктограммы имеют стандартное предназначение.

    Панель инструментов отладки

    (рис 2.7) Design Mode - вход/выход из режима Конструктора;
    Toggle Breakpoint - установка контрольной точки;
    Step Into - переход на следующую команду текущей и вызываемой процедур;
    Step Over - переход на следующую команду текущей процедуры без пошагового выполнения вызываемых процедур. Вызванные процедуры и функции выполняются целиком без остановов на командах;
    Step Out - выход из вызванной процедуры и переход к следующей команде исходной процедуры;
    высвечивание на экране окон редактора ( Locals, Immediate, Watches ).
    Quick Watch - высвечивание окна значений отслеживаемой переменной;
    Call Stack - высвечивание структуры вызовов процедур (стек процедур).

    Запись процедур

    В редакторе VB можно записать любой оператор языка.

    Удобно:
  • воспользоваться справочной системой и скопировать в процедуру примеры, иллюстрирующие выбранную справку.
  • Для добавления процедуры используется команда Insert - Procedure. Этой же командой можно создать функцию.

    (рис 2.8) Добавление процедуры

    В примере добавляется процедура ), что приводит к появлению двух строк

    (рис 2.9) Две строки процедуры

    Для переименования процедуры достаточно изменить ее идентификатор в операторе объявления процедуры Sub.

    Процедуры записываются в стандартных модулях и на процедурных листах. Новый модуль добавляется в проект выбором пункта Module (Модуль) из меню Insert.

    В процедурах записываются операторы и комментарии:

  • операторы представляют собой команды обработки объектов приложения и команды языка Visual Basic ;
  • комментарии - некоторый свободный текст, который вводится в программу в качестве пояснений. Текст комментария начинается с одинарной кавычки (').
  • Использование комментариев не только является хорошим тоном при написании программ, но и значительно облегчает чтение и модификацию программы (в том числе, и самому автору программы через некоторое время).

    Важно:
  • Операторы записываются на отдельных строках программы. Для разделения операторов, записанных на одной строке, используется знак двоеточия (:).
  • Операторы не привязаны к определенной позиции строки, но считается хорошим тоном записывать операторы друг под другом в соответствии с уровнем вложенности операторов (запись тела цикла, условных операторов и т.п.). Стандартный сдвиг в четыре символа производится при нажатии на клавишу , поле Tab Width ).

    Важно:
  • Рекомендуется отделять смысловые части программы пустыми строками и комментариями.
  • Допускается перенос длинного оператора с одной строки на другую. Cимвол продолжения строки - символ подчеркивания (_).
  • Символ продолжения строки не должен разделять ключевые слова или идентификаторы. Он не может находиться внутри текстовой константы.
  • Перед символом продолжения строки должен находиться пробел. После символа продолжения строки не должно быть никаких символов.
  • Для ускорения набора ключевых слов используйте команду Complete Word (Завершить слово) из меню Edit (Правка) или клавиши Ctrl+пробел.
  • Нажатие клавиши Точка (.) после имени объекта высвечивает список свойств и методов, из которого можно выбрать нужное.
  • Подсказка по формальным параметрам процедур возникает при нажатии на клавишу Открывающая Скобка после имени процедуры.
  • В отличие от текстовых редакторов редактор VB не только отображает вводимый текст, но и автоматически вносит изменения.

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

    Настройка редактора выполняется на вкладке Editor Format команды Tools-Options (Сервис-Параметры).

    (рис 2.10) Диалоговое окно настройки редактора VB

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

    Можно импортировать (команда Import из меню File ) текст модуля из файлов с расширениями .frm(формы), .bas(модули), .cls(классы). Также можно экспортировать (команда Export из меню File ) текст модуля в файлы с расширениями .frm, .bas, .cls. Процедуры экспорта и импорта позволяют легко переносить приложение на VBA из одного документа в другой.

    Внимание:
  • В окне программы отображаются тексты процедур объекта, выделенного в окне проекта.
  • В окне программы может отображаться текст одной процедуры ( ).

    Вверху окна программы расположены два списка: список объектов (левый) и список процедур (правый). Содержание списков зависит от типа объекта, для которого высвечено окно программы.

  • Если это стандартный модуль, то список объектов содержит только одну строку - General, а список процедур - строку Declarations и все процедуры модуля.

    Выбор строки Declarations переводит в раздел объявления переменных, в котором располагаются инструкции компилятору и описания переменных, общих для всех процедур модуля или проекта в целом.

    На рис 2.11 из списка процедур выбрана строка b_p. Это действие высветит текст процедуры b_p.

  • Если окно программы отображает процедурный лист для формы или объекта рабочей книги, то список объектов содержит
  • строки для каждого объекта, расположенного внутри выбранного объекта;
  • строку General для выбора общих процедур, необходимых при выполнении событийных процедур, расположенных на этом процедурном листе.
  • Если в списке объектов выделен объект, то второй список - перечень событий, связанных с выделенным объектом. Если в списке объектов выбрана строка General, то во втором списке доступна строка Declarations и перечень общих процедур.

    (рис 2.11) Окно стандартного модуля

    На рис 2.12 в окне программы, открытом для рабочей книги, в списке объектов выделен объект Workbook и для него открыт перечень событий.

    (рис 2.12) Окно программы объекта Эта книга

    Режимы работы с программой

    В VBA возможны четыре режима работы с программой.

  • Режим конструктора. В режиме конструктора можно создавать и редактировать процедуры, создавать и модифицировать формы.
  • Режим выполнения программы. Для запуска процедуры используются клавиша F5 или кнопка Run на стандартной панели инструментов. Предварительно необходимо установить точку вставки внутрь выбранной процедуры. В этом режиме в заголовке окна VB после имени файла указывается [running].
  • Режим прерывания программы. Программа автоматически переходит в режим прерывания при возникновении некоторой ошибки во время выполнения программы.(рис 2.13) Прерывание программыВысвечивается диалог, в котором можно выбрать продолжение ( Continue ) или завершение работы программы ( End ), получение справки относительно возникшей ошибки ( Help ) или переход в режим отладки ( Debug ).Важно:
  • При возникновении ошибки на этапе выполнения ( Run-time error) VBA выводит сообщение, о том, какая именно ошибка произошла (например, Object required ) и позволяет получить более подробный Help об этом типе ошибок. Внимательное чтение сообщений об ошибках и соотвествующих разделов Help значительно упрощает отладку.
  • Если программа зависает или необходимо прервать выполнение программы по какой-то причине, используйте клавиши при нажатии которых программа переходит в режим отладки.
  • Режим отладки программы ( Debug ). Выбор отладки после прерывания программы активизирует окно с текстом выполняемой процедуры. В окне желтым цветом выделен оператор, на котором произошло прерывание. В этом режиме в заголовке окна VBA после имени файла указывается [break].

    Переход в режим отладки происходит автоматически

  • при достижении контрольной точки;
  • программа выполнила команду Stop (пауза в выполнении программы);
  • если выполнено некоторое условие, установленное для отслеживания значений переменных командой Add Watch.
    Вернуться к учебному плану