Редактор VBA (VBE)

Тема излагается на занятиях. Здесь присутствует минимум, пополняемый раз в год.

Содержание

Введение
Инструментальные панели
Настройки
Раскраска кода
Область общих задач
Набор программного кода
Отладка

Введение

Для изучения кода программы, его исправления и отладки служит дополнительный встроенный редактор (Visual Basic Editor, VBE).

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

Показанное ниже окно (VBE 2016) содержит, помимо стандартных элементов, меню и инструментальных панелей, три окна.

  1. Менеджер проектов (Project) является ключевым элементом для перемещения и, соответственно, отображения как самих программных проектов, так и их частей. В приведенном примере видны три проекта: MathType, Текущий документ (Qq_forms) и шаблон Normal. У текущего документа подсвечена серым фоном форма Test1, что означает работу в настоящий момент именно с ней.
  2. Свойства (Properties) позволяют увидеть и изменить всю совокупность параметров текущего объекта. Так как выделенных объектов нет, окно пусто.
  3. Окно модуля программного кода служит для просмотра, редактирования, ввода и контроля отладки подпрограмм (Sub). Здесь присутствуют две скрытых (Private) подпрограммы, интерфейс отделяет одну от другой горизонтальной чертой.

В связи с тем, что возможно создание двух типов результатов: макросов и форм, внешний вид редактора может несколько различаться.

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

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

Инструментальные панели

Проще всего понять, что есть, и что включено, вызвав контекстное меню щелчком правой кнопки мыши в области меню/панелей.

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

Хотя всегда включена лишь стандартная (Standard) панель.

Панель элементов управления (Toolbox) появляется автоматически, при активации окна формы.

Пункт Customize приведет вас в стандартный диалог настройки меню/панелей формата Office 2003. То есть? здесь это еще испортить не успели.

Настройки

Для вызова диалога настроек, следует выполнить команду меню Tools ⇒ Options.

Смотрим, читаем, думаем. Исправлять стоит только после серьезной оценки.

Раскраска кода

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

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

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

Ошибки, обнаруженные при выполнении,

при переходе в режим отладки также даст выделение желтым, но только для строки с ошибкой.

Программа не прервана, а приостановлена и перешла в режим Отладки.

Цветовая гамма задается вкладкой Editor Format диалога настроек и ограничена в выборе.

Я бы не рекомендовал производить принципиальных изменений, чтобы не нарушить общую концепцию.

Область определений/общих задач (General, Declarations)

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

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

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

Public Var As Byte

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

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

Public NmArr(1 To 5)

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

Public Const conLvl As Integer = 5

Выражением Option Base 0 | 1 можно задать, с какого номера будут начинаться по умолчанию элементы создаваемых массивов (с 0 или с 1).

Это не повлияет на массивы, принудительно создаваемые с нулевого элемента, например, командой

Dim MyArray(0 To 10)

Выражение Option Private Module позволяет запретить ссылки на контент модуля (переменные, процедуры и функции) извне проекта.

Наконец, использование выражения (оператора) Option Explicit в этой области принуждает программиста объявлять все переменные перед тем, как их использовать. Данное положение требует дополнительного комментария.

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

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

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

Также в данной области могут быть использованы директивы Option Compare и Option Private Module, с которыми можно познакомиться самостоятельно. Нам они не понадобятся.

Набор программного кода

Макрорекордер — хорошо и даже более того, но набирать вручную приходится все равно. Среда VBE в этом плане если и не является эталонной, то настроена к программисту крайне дружелюбно.

Пока подробно только об одном. Для создания вручную новой программы (процедуры), нужно ввести слово «Sub», имя программы и нажать Enter. Среда сама сделает все остальное, а именно:

  1. Добавит скобки после имени программы.
  2. Добавит завершающую строку «End Sub».
  3. Установит курсор между ними для набора.

Остальное тезисно...

Точно также следует набирать условный оператор If и циклы, но делать это придется вручную.

Автоматическая расстановка пробелов

Автоматическое измение регистра всех командных слов.

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

Частичная проверка по результату набора строки происходит при попытке выхода из нее.

Набор нескольких команд в одну строку.

...

Основы отладки

Первое, что стоит отметить, заключается в практически неизменных механизмах отладки с самого первого момента. Во многом это определяется изначальным качеством выполнения. Но для программирования много экрана не бывает, так что идеальной средой будет вывод документа на одном мониторе, а среды VBE — на другом. Экран нетбука и подобной техники вы можете оценить сами, хотя, на момент изначальной разработки редактора, вполне профессиональным считался монитор с разрешением 1280*1024 точки.

Процесс возможен только при включенной панели Debug.

Часть имеющихся кнопок (пуск, пауза, стоп) продублирована на стандартной панели.

КнопкаНазваниеКлавишаНазначение
Design ModeПереключатель. Включение приводит к блокировке исполнения элементов управления в документе (режим Конструктора)
Run Sub/UserFormF5Запуск текущей программы или формы
BreakCtrl+BreakПрерывание выполнения программы (пауза)
ResetОстановка исполняемой программы
Toggle BreakpointF9Точка остановки
Step IntoF8Построковое выполнение
Step OverShift+F8Построковое выполнение с «перепрыгиванием» процедур
Step OutCtrl+Shift+F8
Locals WindowВыводит окно Locals и/или переключает фокус на него
Immediate WindowCtrl+GВыводит окно Immediate и/или переключает фокус на него
Watch WindowВыводит окно Watches и/или переключает фокус на него
Quick WatchShift+F9Мастер быстрого создания для отслеживания состояния
Call StackCtrl+LСтек вызова функций

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

В этом режиме можно определить значение каждой переменной, наведя на нее курсор мыши: оно появится в виде всплывающей подсказки. Для более наглядного контроля, значение можно вывести в окне Watches, воспользовавшись кнопкой (Shift+F9). Кроме того, окно Immediate позволяет выполнять дополнительные команды в процессе отладки программы. Например, вы можете переопределить переменную выполнением введенной (или скопированной) строки команды или запросить ее «Print ИмяПеременной». После ввода любой команды нужно нажать Enter.

Чаще всего, на первом этапе можно не выполнять пользовательские функции (внешние процедуры), проходя их кнопкой (Shift+F8). А если вы в нее зашли и убедились, что все в порядке, то быстро закончить выполнение ее кода и приостановиться на вызвавшей строке можно кнопкой (Ctrl+Shift+F8).

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

На данном этапе я не вижу необходимости в углубленном обсуждении.

Точка остановки (BreakPoint)

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

Для установки или удаления точки остановки нужно щелкнуть мышью на левом поле напротив нужной строки (F9). На поле появится кружок, он и фон строки будут иметь красно-коричневый цвет.

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

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

Стек вызова функций (Call Stack)

Удобное средство для определения положения программы в совокупности выполняемых процедур и перехода между ними в процессе приостановки исполнения.


Copyright © 1993–2020 Мацкявичюс Д.А. Все права защищены.
Никакая часть сайта не может быть воспроизведена никаким способом без письменного разрешения правообладателя и явной ссылки на данный ресурс.