Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Orlov_VBA

.pdf
Скачиваний:
23
Добавлен:
13.03.2016
Размер:
7.79 Mб
Скачать

Рис. 3.18. Окно Просмотр обьектов

На панели инструментов "Правка" Редактора VBA имеются соответствующие кнопки для вызова вышеописанных функций. Так, кнопка "Список свойств/методов" позволяет увидеть возможные продолжения любой команды (то же самое можно получить, поставив после команды точку, но так неудобно делать в уже написанном тексте), а кнопка "Сведения" выводит информацию о переменной, которая в данный момент выделена. Как и в самом редакторе Word, в Редакторе VBA можно вставлять закладки в текст программы для более удобного перехода к соответствующим его частям.

Модули, входящие в состав проекта, можно сохранить в текстовом файле. Для этого в Менеджере проектов из контекстного меню правой кнопки мыши соответствующего модуля надо выбрать функцию "Экспорт файла" (рис. 3.19). Модуль будет сохранен в текстовом файле с расширением ".bas". Можно просто перетащить название модуля в окно Проводника, держа нажатой левую кнопку мыши - Редактор VBA поддерживает механизм Drag-and-Drop. Вставить ранее сохраненный модуль можно через команду "Импорт файла" того же меню или путем перетаскивания его иконки в окно Редактора VBA.

Рис. 3.19. Экспортирование модуля

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

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

Редактор VBA обладает очень большими возможностями отладки программы, то есть поиска в ней алгоритмических и языковых ошибок. Поскольку язык Visual Basic for Applications - не компилируемый, а интерпретируемый (то есть готовая программа представляет собой текст исходного кода, хранящийся в шаблоне или документе, который переводится в машинные коды при каждом ее запуске, в то время как конечный продукт средств создания программ на остальных языках программирования практически всегда представляет собой файл с исполняемым машинным кодом), то после завершения написания кода и успешной его отладки программа готова к использованию.

Для запуска на выполнение готовой или записанной программы из редактора Visual Basic for Applications необходимо нажать клавишу F5 или выбрать соответствующий пункт из меню "Запуск" (в английской версии - Run). Программа начнет выполняться и, если в ней вдруг найдутся ошибки в записи команд или обращения к неизвестным командам, будет выдано соответствующее сообщение

(рис. 3.20).

Рис. 3.20. Сообщение об ошибке компиляции

Данное сообщение означает, что эта команда редактору Visual Basic for Applications неизвестна. Значит - надо изменить код программы, соответственно исправив его.

(В Visual Basic for Applications можно создавать собственные команды - функции или процедуры, которые могут вызываться так же, как и встроенные. Об этом будет рассказано ниже.)

Если возникает ошибка вследствие неправильного использования команд Word, то редактор Visual Basic for Applications выдает диалоговое окно, в котором приводится некоторое описание ошибки. Так, при попытке выделить жирным шрифтом десятимиллионное слово в документе было выдано сообщение "Запрашиваемый номер семейства не существует" (рис. 3.21), так как десятимиллионного слова в документе не было.

Рис. 3.21. Сообщение об ошибке из-за неправильного использования команд VBA

Впоследнем диалоговом окне, как можно видеть, есть кнопка под названием "Отладка". Нажав на нее, можно перейти в режим отладки программы - то есть специального состояния Редактора Visual Basic for Applications, в котором программа может исполняться построчно, а программист имеет возможность видеть значения всех переменных программы и даже принудительно задавать эти значения. Также в режим отладки можно перейти из Редактора VBA, поставив курсор внутрь программы и нажав клавишу F8.

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

Врежиме отладки программисту доступны следующие возможности:

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

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

Рис. 3.22. Просмотр значения переменной в режиме отладки

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

(Local Window), рис. 3.23.

Рис. 3.23. Окно локальных переменных.

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

3. Точки останова. Если программа длинная, то проходить по всем ее строчкам с помощью кнопки F8 - занятие не слишком интересное и приятное. В этом случае лучше использовать точки останова: то есть отметки в тексте программы, где ее исполнение должно остановиться, а сама программа - перейти в режим отладки. Для установки точки останова нужно щелкнуть левой кнопкой мыши на сером левом поле окна модуля, и тогда появится коричневая строка с кружочком на месте точки останова (рис. 3.24).

Рис. 3.24. Точка останова.

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

4. Окно контрольного значения (Watch Window). В этом окне можно задать определенное выражение, значение которого будет подсчитываться параллельно с выполнением программы. Кроме того, выделив в режиме отладки какое-нибудь выражение и нажав Shift и F9, можно увидеть его значение, а также добавить это выражение в окно контрольного значения и отслеживать его дальнейшие изменения.

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

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

5. Окно проверки или Отладки (Immediate Window). Это окно вызывается из меню Вид - Окно отладки. В текст программы можно вставить специальные команды - Debug.Print (a+b, например). Тогда при выполнении этой команды в Окно отладки будет печататься то, что задано в ее параметрах (рис. 3.25).

Рис. 3.25. Окно отладки.

Возможности применения этого окна многообразны. Можно выводить в него сообщения в случае выполнения какого-либо условия. Можно отображать в нем промежуточные результаты вычислений для контроля их правильности - чтобы не смотреть и искать нужное выражение в окнах Локальных переменных или Контрольного значения, а получать их сразу, перед глазами. Можно даже использовать это окно как маленький калькулятор или командную строку (рис. 3.26), и тогда при нажатии Enter после ввода команды она будет тут же выполнена! Надо только перед самой командой писать слово Print, если команда должна выдать какой-нибудь результат в этом же окне.

Рис. 3.26. Калькулятор в окне отладки

6. Стек вызова (Call Stack). В этом окне отображается структура программы, состоящей из нескольких подпрограмм - процедур или функций, а также показывается, какие переходы возможны между этими подпрограммами. Если программа сложная и большая, то разобраться, какая подпрограмма вызывает ту или иную другую подпрограмму, достаточно трудно, - для этого и стоит использовать Стек вызова, в котором все вызовы подпрограмм друг друга наглядно изображены.

Окна Контрольного значения, Локальных переменных, Отладки и Стека вызова могут быть вызваны как из меню Вид или соответствующими сочетаниями клавиш, так и при нажатии кнопок на панели "Отладка". Достаточно только подвести курсор к каждой кнопке панели, чтобы увидеть, какую команду она вызывает.

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

Для выхода из режима отладки до завершения полного выполнения программы необходимо выбрать функцию Сброс из меню Запуск или нажать на панели "Отладка" кнопку "Сброс".

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

И помните, что Вы можете всегда получить подробную справку по любой команде, поставив на нее курсор и нажав клавишу F1.

VBA: основы синтаксиса

** *

Для полного описания возможностей и составляющих языка Visual Basic for Applications потребовалось бы несколько толстых книг. Поэтому в этом учебнике вы не найдете подробных описаний каждой команды Visual Basic for Applications, рассказа об их формате и требуемых параметрах. Не найдете по очень простой причине – вся эта информация приведена в Справочной системе Редактора VBA, да и встроенные в него средства автоматической подсказки, о которых вы могли прочесть выше, тоже не дадут ошибиться. Если необходимо узнать, какой набор команд позволяет программно реализовать ту или иную встроенную возможность, например, Microsoft Word, то можно воспользоваться средством записи макросов, выполнив необходимые действия во время его работы, а потом почитать в Справочной системе о каждой записанной команде, открыв получившийся макрос в Редакторе VBA.

Однако в Visual Basic for Applications есть некоторые вещи, о которых в Cправочной системе упоминается не на первом плане, и человеку, незнакомому с программированием, трудно узнать о них. Поэтому в этой главе будут приведены описания некоторых команд, которые нельзя записать средством записи макросов, а также рассказано о неочевидных возможностях Visual Basic for Applications.

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

Вэтом случае им можно пропустить данную часть.

** *

Примечание

Очень полезно при разработке программ на Visual Basic for Applications смотреть примеры использования команд, приводимые в справке - в разделах "Example" многих справочных окон (рис. 4.1). Стоит даже копировать оттуда фрагменты кода и модифицировать их под свои нужды.

Рис. 4.1. Фрагмент кода в справке

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

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

* * *

1. События, методы, свойства.

Когда-то давным-давно программы, написанные и работавшие тогда еще под MS-DOS, получали от пользователя данные, обрабатывали их и выдавали затем результат. Почти любая программа предусматривала в своей работе период ввода данных, период обработки, период выдачи результата. Подобные действия были принципом работы Dos-овских программ. И программирование их называлось структурным, - надо было строго и последовательно разрабатывать алгоритм, реализовывать заданный порядок действий программы, в который в процессе работы почти не мог вмешаться пользователь, разве только принудительно остановив программу.

С появлением операционной системы Windows стал широко известным другой принцип программирования и создания алгоритмических языков - принцип объектно-ориентированного языка.

Это значит, что основная направленность разработчика сместилась с действия на объект, - на описание на языке программирования реакций этого объекта на действия пользователя, его свойств и их изменений. И Visual Basic for Applications является типичным представителем объектноориентированных языков, как по своему синтаксису, так и по архитектуре программ.

Основными понятиями объектно-ориентированного языка являются объект, свойство, метод,

событие.

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

Почти каждый объект внутри себя имеет подобъекты, которые, в свою очередь, являются полноценными объектами и могут иметь свои подобъекты. Например, у объекта "Документ" есть подобъект "Десятое предложение", у которого есть подобъект "Второе слово", у которого есть подобъект "Третья буква". С помощью объектно-ориентированного языка Visual Basic for Applications можно обратиться к любому объекту Microsoft Office, если знать его иерархию - то есть перечень всех тех объектов, чьим подобъектом он является, и произвести с этим объектом какое-либо действие или, наоборот, узнать какие-либо его характеристики.

Свойство - это любая характеристика объекта. К примеру, у объекта - первой буквы документа есть свойства: выделение жирным, выделение цветом, подчеркивание, выделение курсивом, регистр и много еще других. У объекта - документа есть свойства: наличие автоматической расстановки переносов, наличие автоматической проверки грамматики и др. Большинство свойств объектов Visual Basic for Applications можно задавать программно, однако есть свойства Read-Only - не допускающие изменений. Многие свойства объектов Word также задаются через стандартные диалоговые окна Word - например, "Файл - Параметры страницы" или "Сервис - Параметры", однако их всегда можно задать и программно, а соответствующие диалоговые окна использовать при записи макроса для того, чтобы посмотреть синтаксис команды задания того или иного свойства.

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

With Selection.Find

.Text = "Этот текст надо заменить"

.Replacement.Text = "Заменить на этот текст"

.Forward = True

.Wrap = wdFindContinue

.Format = False

.MatchCase = False

.MatchWholeWord = False

.MatchWildcards = False

.MatchSoundsLike = False

.MatchAllWordForms = False End With

Selection.Find.Execute Replace:=wdReplaceAll

В данном примере вначале объекту Visual Basic for Applications "Find" (т.е. "процессу поиска"), являющемуся подобъектом объекта "Selection" (т.е. выделенный фрагмент текста или, если такового нет, точка ввода текста), задаются необходимые свойства ".Text" (текст для замены), ".Forward" (направление поиска), ".Format" (необходимость учитывания формата текста) и другие. Затем выполняется метод ".Execute" (т.е. здесь - собственно "выполнить поиск") для объекта

"Selection.Find" с параметром "Replace:=wdReplaceAll"(т.е. "Заменить все").

Команда "With … End With" позволяет не писать для каждого свойства или подобъекта полное название соответствующего объекта, что дает возможность экономить место и делать программу лучше и быстрее работающей.

Свойства и методы по-разному отображаются в контекстной подсказке. Так, против названий свойств стоит серый символ указывающей руки, а против названий методов - зеленый значок летящей коробки (см. на рис. 4.2).

Рис. 4.2. Свойства и методы в контекстной подсказке

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

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

В Visual Basic for Applications для каждого события можно написать программу, которая будет срабатывать именно тогда, когда событие произойдет, и выполнять определенные действия, которые должны быть выполнены, когда это событие совершается.

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

2. Типы данных и обьявление переменных.

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

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

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

Разделение переменных по типу данных необходимо для того, чтобы при выполнении программы под каждую переменную иметь возможность отводить нужное количество памяти для размещения содержащейся в этой переменной информации. Если представить себе язык программирования, переменные в котором могут принимать значение лишь какой-либо буквы алфавита или одного из двух вариантов - "Истина" или "Ложь", то для того, чтобы переменная этого языка гарантированно поместилась в памяти, для нее надо выделить один байт - столько, сколько занимает буква. А в том случае, если в этом представленном нами языке существует возможность определить тип данных переменной, то переменной, могущей принимать значение лишь "Истина" или "Ложь" и вследствие этого имеющей особый тип данных (обычно он именуется "булевый"), отличающийся от того, который имеют буквенные переменные, может быть выделен лишь один бит памяти - для записи значения "0" или "1", соответственно обозначающего "Ложь" и "Истину". В последнем случае расход памяти в восемь раз ниже.

В Visual Basic for Applications определено большое количество различных типов данных (рис. 4.3). Так, переменная типа Integer - это целое число от -32 768 до 32 767, а переменная типа String - это строка текста длиной до двух миллионов символов. Все возможные в Visual Basic for Applications типы данных подробно описаны в справке по этому языку. В зависимости от типа данных с переменной можно производить те или иные действия и вычисления, - с числовыми математические, с текстовыми - текстовые (выделение подстроки из строки, получение отдельных символов из строк и др.) и т.д.

Рис. 4.3. Пример справки по типам данных

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

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]