Программы на VBA объединяются в проект. Программы могут реализовывать некоторые пользовательские методы, выступать в роли обработчиков событий, играть вспомогательные роли. Программы, не являющиеся обработчиками событий, не являющиеся методами объектов, указанных в проекте, следует писать в модулях. В одном проекте может быть несколько модулей.
Воспользовавшись меню "View", Вы можете расположить на экране окна, которые помогут Вам написать и отладить проект на VBA. Это окно проекта (Project Explorer), окно свойств (Properties Window), окно текущих значений (Watch Window), окно немедленного выполнения команд (Immediate Window), окно локальных переменных (Locals Window).
В окне проекта видны доступные объекты верхнего уровня: документ, формы, модули, модули классов, шаблоны. Двойной щелчок переведет Вас в код выбранного объекта.
В проект можно добавлять (в главном меню пункт Insert) модули, формы, описания классов (модули классов). В разных модулях могут быть даже одноименные доступные извне процедуры, т.к. полное имя процедуры включает имя модуля. Например, пусть в M_math описана процедура trycalc. Тогда ее полное имя: «M_math.trycalc».
Из любого объекта проекта можно перейти в кодовое окно (окно программ), если в контекстном меню "View code".
В окне локальных переменных видны в ходе пошагового выполнения программы все переменные, описанные на уровне текущего модуля (наверху, в General области) и внутри текущей программы (то есть локальные переменные). Здесь достаточно удобно следить за изменением значений переменных, их типами. Если текущая выполняемая процедура была вызвана из какой-то другой процедуры, а та, в свою очередь, была тоже вызвана из третьей процедуры, то чтобы увидеть текущее состояние локальных переменных любой из этих процедур, воспользуйтесь пунктом главного меню «View – Call Stack». При выборе этого пункта вы увидите стек вызовов и щелчком по имени процедуры сможете перейти к нужной. Важно, что значение переменной вы можете тут же в окне изменить, щелкнув по нему.
Преимущество окна локальных переменных состоит в том, что вам ничего не требуется добавлять в него, только смотрите. В этом же его недостаток. Вы здесь не можете увидеть значение некоторого интересующего вас выражения, вы не видите доступных объектов, с другой стороны вы видите, возможно, массу не интересующих вас сейчас переменных, которые только рассеивают внимание.
Более удобное окно – окно текущих значений (Watch). В это окно необходимо добавить все, за чем вы собираетесь следить. Для этого выберите в контекстном меню пункт «Add Watch». И это могут быть и локальные переменные и выражения и переменные из других процедур и функций, из других модулей. Таким образом вы устраиваете для себя рабочую среду. Самое интересное – возможность отладочного останова выполнения программы в случае, если значение какого-то выражения изменится или в случае, если оно станет истинным.
Также необходимо уметь пользоваться окном немедленного выполнения команд. Это очень удобное средство изучения встроенных функций, средство для поэтапного составления сложного выражения. В этом окне на стадии отладки доступны все локальные переменные и все объекты. Это – консоль VBA. Здесь можно выполнять любые операции и операторы. В этом окне можно заводить переменные, присваивать им значения. К сожалению, увидеть значения этих переменных в окне Watch невозможно. Но можно их вывести тут же, в консоль при помощи оператора «print» или его сокращенного варианта «?». Интересно, что оператор выполняется тогда, когда вы, находясь на его строчке (в совершенно произвольном месте!) нажимаете на клавишу «Enter».
В этом окне работает браузер объектов, подсказывая вам и имена свойств и методов объектов и имена доступных переменных. Вызов этого помощника Ctrl+J. Экономьте свои усилия, пользуйтесь подсказками. Причем, не обязательно полностью вводить имя свойства или метода. Если в контекстном списке уже выделено нужное, нажимайте на клавишу – следующую операцию, а полный текст сформирует помощник. Пусть вам надо набрать следующий фрагмент: ActiveDocument.Paragraphs.Add. Нажмите Ctrl+J, наберите символ «a». Если уже выделилось слово «ActiveDocument», нажимайте на точку «.». Далее набирайте последовательно «para», либо стрелочкой подойдите к нужному слову, когда оно совсем рядом, снова нажмите на точку, затем наберите символ «а» и далее пробел. Убедитесь, что такой способ набора, хотя и требует определенного навыка, очень скоро дает значительный выигрыш во времени и почти не отвлекает внимание от собственно программирования.
Достаточно удобное средство отладки – объект Debug. С его помощью можно организовать «трассировку» работы программы: выдавать некоторые информационные сообщения в окно Immediate.
Debug.Print "прошли по всему массиву"
Можно перейти в режим отладки при выполнении некоторого условия, воспользовавшись, например, следующей конструкцией:
If x>100 then Debug.Assert false