Ф.И. Воробьева, Е.С. Воробьев
ПРИЕМЫ ПРОГРАММИРОВАНИЯ В СРЕДЕ VISUAL BASIC FOR APPLICATION MS OFFICE Учебное пособие
2...
32 downloads
639 Views
1MB Size
Report
This content was uploaded by our users and we assume good faith they have the permission to share this book. If you own the copyright to this book and it is wrongfully on our website, we offer a simple DMCA procedure to remove your content from our site. Start by pressing the button below!
Report copyright / DMCA form
Ф.И. Воробьева, Е.С. Воробьев
ПРИЕМЫ ПРОГРАММИРОВАНИЯ В СРЕДЕ VISUAL BASIC FOR APPLICATION MS OFFICE Учебное пособие
2010
Федеральное агентство по образованию Государственное образовательное учреждение высшего профессионального образования «Казанский государственный технологический университет»
Ф.И. Воробьева, Е.С. Воробьев
ПРИЕМЫ ПРОГРАММИРОВАНИЯ В СРЕДЕ VISUAL BASIC FOR APPLICATION MS OFFICE Учебное пособие
Казань КГТУ 2010 -4-
УДК 658.26:66.094 Воробьева, Ф.И. Приемы программирования в среде VISUAL BASIC for APPLICATION: учебное пособие / Ф.И. Воробьева, Е.С. Воробьев. – Казань: Изд-во Казан. гос. технол. ун-та; 2010. − 104 с. ISBN 978-5-7882-0825-1 Рассмотрены основные элементы среды разработки программ, а также базовые конструкции алгоритмического языка Visual Basiс for Application. Показаны примеры разработки пользовательских функций Ехсel Продемонстрированы приемы работы с отладчиком программ. Даны общие принципы и примеры создания пользовательских программ (макросов) и форм для создания своих приложений в среде Excel. Пособие может быть использовано при изучении дисциплин «Информатика», «Применение ЭВМ в технологии» и «Применение ЭВМ в расчетах», а также при курсовом и дипломном проектировании. Предназначено для студентов очной и заочной форм обучения специальностей 240802.65 «Основные процессы химических производств и химическая кибернетика» и 240801 «Машины и аппараты химических производств», обучающихся по направлению 240800 «Энерго- и ресурсосберегающие процессы в химической технологии, нефтехимии и биотехнологии». Подготовлено на кафедре общей химической технологии. Печатается по решению редакционно-издательского совета Казанского государственного университета. Рецензенты: профессор КГТУ им. Туполева
О.Ш. Даутов
старший научный сотрудник Казанского научного центра РАН Д.В. Чачков ISB N 978-5-7882-0825-1
ã Воробьева Ф.И., Воробьев Е.С., 2010 ã Казанский государственный технологический университет, 2010
-5-
Введение Visual Basic for Application (VBA) это среда программирования в пакете программ Microsoft Office. Средствами VBA можно создавать функции пользователя, которые используются на листах электронных таблиц, макросы (макро команды) для создания новых команд из комбинаций стандартных команд приложений, если их надо часто повторять в том же порядке, программные надстройки для специальных программных решений внутри приложений Microsoft Office. Основные понятия объектно-ориентированного программирования Объектно-ориентированное программирование позволяет существенно упростить процесс создания программ. Основами данного способа программирования являются объекты. Объекты – представляют собой законченные элементы, которые мы используем во время программирования. Например, мы строим различные геометрические фигуры, каждая из них может быть объектом. Возьмем прямоугольник, чтобы его построить нам надо знать его ширину и длину, которые являются его (прямоугольника) свойствами (Properties). Если мы не знаем объекта прямоугольник, то нам надо будет нарисовать четыре линии соответствующих длин и правильно их сориентировать друг относительно друга. Когда мы имеем объект прямоугольник, то все операции его построения уже заложены в самом объекте. Например, нам надо расширить наш объект новым свойством (цветом). Создаем для него новое свойство «Цвет заливки» и пишем подпрограмму для его реализации. Показанный пример объекта весьма прост. В реальных условиях каждый объект обладает: · свойствами (Properties), которые задаются конкретными значениями (длина и ширина). Их можно считать или изменять, задав нужное значение; · методами (Methods), которые реализуют какие-либо действия с объектом, например, изменить его размеры, цвет и т.п.; · событиями (Events), в которых обычно и реализуются программы пользователя для управления данным объектом, например, щелчок мышки или ее движение через объект и т.п. Каждый объект может включать в себя другие объекты, и сам входить частью в объекты более высокого уровня. Например, наш -6-
объект прямоугольник, может включать в себя четыре объекта линий, а линия может состоять из двух точек. Также можно двигаться и в другую сторону, включая прямоугольник в более сложные объекты. Вся структура пакета программ Microsoft Office построена на этой же идеологии. Каждая программа является объектом с именем Application (Приложение). В свойствах этого объекта мы можем узнать имя самой программы (Word, Excel и т.п.), параметры окна, открытые файлы документов и т.д. С использованием методов мы можем открывать и закрывать документы и саму программу, изменять размеры рабочего окна программы и т.п. Если мы хотим создать свою процедуру запуска программы, то мы можем записать в событие объекта свой программный код, например, при запуске Word, обязательно открывать нужный документ. В свою очередь каждый документ тоже является объектом, содержащим более мелкие объекты, так, например, электронная таблица содержит листы, а лист имеет ячейки. Хорошее понимание объектно-ориентированного программирования и умение использовать стандартные объекты существенно упростит создание ваших программ. Прежде чем перейти к самим приемам работы в среде программирования VBA, познакомимся с размещением программ пользователей в документах. Модули Все программы Visual Basic for Application сохраняются в рабочих файлах Microsoft Office, это могут быть документы Word, электронные таблицы Excel и файлы других программ пакета. Обычно программы VBA находятся в специальной части файлов, называемой Modules (модули). Модуль VВА содержит исходный код программы – текстовое представление инструкций по выполнению вычислений. Каждый файл может иметь до нескольких модулей. Модули объединены в общий объект Project (проект). Существует несколько типов модулей: · модули объектов документа, которые содержат нужные программные реализации для событий этих объектов. Например, если мы создали экранную форму, которую надо запускать одновременно с открытием документа, то процедуру ее показа надо записать в событие книги - Open; · экранные формы, которые позволяют создавать свои рабочие окна для реализации ваших собственных задач. Формально данные модули состоят из двух – собственно экранной формы и программно-7-
го кода для реализации необходимых событий ее объектов; · модули программ – основной элемент VBA, который содержит программный код для функций пользователя, макросов и внутренних подпрограмм, необходимых для работы как функций и макросов, так и разработанных экранных форм; · модули классов (объектов), которые создают новые объекты (классы) на основе уже имеющихся объектов приложения. Первая группа модулей существует в документе всегда, для других групп имеются методы для их создания или загрузки из соответствующих файлов. Чтобы создать модуль в проекте необходимо выполнить команду Insert => Module (UserForm, Class Module), что приведет к созданию выбранного модуля и изменению содержимого окна проекта. Появится строка Моdulе1, соответствующая вставленному модулю в окне проекта. Модуль может быть создан автоматически, когда пакет (Word, Excel) выполняет запись макроса, ему присваивается имя ModuleN, где N – первый свободный номер в проекте модулей во время текущего сеанса работы. Например, в первый раз, когда вы сохраняете записанный макрос в Книге1.xls, Excel создает модуль с именем Module1. Если вы продолжаете записывать макросы в том же сеансе работы и сохранять их там же, Excel продолжает сохранять записанные макросы в том же модуле Module1 до тех пор, пока вы не выберете другую рабочую книгу. Если позже в том же сеансе работы вы опять захотите сохранить записанные макросы в Книге1.xls, то будет добавлен другой модуль с именем Module2. Любой из добавляемых модулей может быть импортирован в проект, используя команду File => Import File…, затем надо показать нужный файл для загрузки. Эта команда бывает очень удобной, для внесения в проект набора стандартных процедур, которые вы используете при создании своих программ. Чтобы создать такие файлы для загрузки, нужно необходимые модули экспортировать в файл по команде File => Export File… Для удаления модуля следует выполнить следующие команды: 1) кликнуть правой кнопкой мышки на имени этого модуля в окне проекта, например, на Моdulе1; 2) в открывшемся контекстном меню выполнить команду Remove (Удалить); 3) выбрать предлагаемую операцию экспорта модуля перед его удалением Yes (Да) или кликнуть на кнопке No (Нет), если экспорти-8-
ровать модуль перед удалением не надо. Теперь можно познакомиться и с самой оболочкой для разработки программ в среде VBA. Основные элементы управления в редакторе VBA Для просмотра модулей и работы с программным кодом вам необходимо использовать редактор Microsoft Visual Basic. Этот компонент предоставляет инструментальные средства, которые используются для создания новых модулей, просмотра содержимого существующих модулей, создания и редактирования исходного кода программ, разработки пользовательских диалоговых окон и выполнения других задач, относящихся к написанию и обслуживанию программ на VВА. Независимо от того, работаете ли вы в Word или в Excel, редактор VBA запускается одним и тем же способом. Используйте для этого один из следующих приемов: · Выберите на ленте инструментов вкладку Разработчик, а на ней инструмент Visual Basic. · Нажмите сочетание клавиш Alt+F11. Основное окно редактора VBA (рис.1) ничем не отличается от окон MS Office. Верхняя строка – заголовок окна с именем самой программы Microsoft Visual Basic и через дефис именем документа, в котором создается программный код. Здесь же имеются системные кнопки управления окном, как во всех программах MS Office. Ниже находится строка основного меню и панели инструментов, дублирующие наиболее часто повторяющиеся команды из меню. Более подробно по ним будет описано ниже. Все остальное пространство занимает рабочая область, которая может разделяться на различные окна и панели. Их можно раскрывать или скрывать по мере надобности. Это панели: · проекта (Project) (в левой верхней части экрана) – содержит перечень объектов, входящие в документ создаваемой программы. На рис.1 видно, что имеются два проекта: это собственно наш рабочий документ (книга Excel), содержащий четыре объекта – листы книги (Лист1, Лист2, Лист3) и сама книга (Эта книга), и второй проект – надстройка Exp_fun.xla, что видно по ее расширению. По мере наполнения проекта там могут появляться новые объекты – программные модули, пользовательские формы и т.д. В заголовке панели имеются три кнопки, которые выполняют следующие функции: по-9-
казывает программный код объекта, выводит на экран сам объект, если это возможно (это возможно только для пользовательских форм), и раскрывает или сворачивает дерево объектов;
Рис.1. Окно VBA
· свойств объектов (Properties) (в левой нижней части экрана) – содержит перечень свойств выделенного объекта, в нашем случае здесь представлены свойства выделенного в проекте объекта Лист1. В заголовке панели имеется выпадающий список из включенных в данный объект его членов (members) – других объектов, на которые можно быстро перейти при их выборе. Все свойства объекта могут быть представлены в двух вариантах – по алфавиту (Alphabetic) или по категориям (Categorized) согласно имеющимся на этой панели закладкам; · коллекции объектов (Object browser) (справа вверху) – содержит библиотеку всех объектов, использующихся в среде VBA и самого - 10 -
приложения (в нашем случае это электронная таблица Excel). Здесь можно найти любой объект, познакомиться с его свойствами и получить более подробную информацию по каждому объекту, его свойствам, методам и событиям через систему помощи [F1]. Выбор объектов может быть организован через выбор нужной библиотеки (выпадающий список в верхней строке панели). Здесь можно выбрать нужную из них или все сразу All Libraries (все библиотеки), как показано на рис.1. Затем выбираем нужный объект в двух нижних списках: в списке классов (Classes) (наборов из нескольких объектов, объединенных в группу (Класс)) и списке членов класса (Members of …) самих объектов или их свойств. Можно найти нужный объект в поиске (вторая строка панели). Результаты поиска представляются в окне ниже. Выбрав нужный объект, можно увидеть все его свойства в нижних окнах; · исполнения (Immediate) (внизу слева) – окно, где можно немедленно выполнить команду VBA или даже нескольких команд; · локальных переменных (Locals) (внизу в центре) – окно, где автоматически выводится информация по всем описанным в программе переменным во время выполнения кода; · просмотра (Watches) (внизу справа) – окно, куда можно ввести выражение, которое будет вычислено, и результат будет выведен в нем; · собственно окно кода программы, которое обычно находится вместо коллекции объектов. Сюда вносится сам код программ (рис.2). В верхней строке окна имеются два выпадающих списка. Левый из них показывает область в коде модуля. В нем могут быть два значения: «General» – основная область и «Имя_объекта» (Worksheet, Workbook и UserForm) – область программ данного объекта. Правый список содержит обязательное значение «Declaration» – описание переменных, и список общих и вспомогательных процедур, расположенных в этой области кода. При выборе другого объекта в левом списке, правый будет содержать все программы, описывающие события для данного объекта. Данные списки позволяют быстро переходить к различным программам внутри модуля. Все панели могут быть скрыты с помощью щелчка на кнопке с крестиком соответствующей панели. Чтобы отобразить какую-либо отсутствующую панель, следует открыть меню View (Вид), кликнуть на соответствующей строке выпавшего меню. Для ряда панелей имеются комбинации горячих клавиш для их быстрого вызова. - 11 -
Рис.2. Окно кода программы
Как уже говорилось выше, в окне кода набирается сам текст программы. Это можно делать вручную, но лучше пользоваться стандартными заготовками – шаблонами. Познакомимся с первым из них – созданием процедуры. Для этого необходимо в меню Insert выбрать команду Procedure. В открывшемся окне вставки процедуры (рис.3) необходимо задать имя процедуры, выбрать её тип (Sub (подпрограмма), Function (функция), Property (свойство)) и область видимости (Public (публичная), Private (приватная)). ЗаверРис.3. Окно вставки процедуры шить ввод нажатием кнопки Ok. В окне кода появится заготовка программы. Первая и последняя строки (операторы) программы стандартные: Sub имя () End Sub
Вам теперь необходимо ввести собственно код программы между этими строками. Помните, что в именах идентификаторов (программ, переменных) не должно быть пробелов (их можно заменять подчеркиванием «_»). Они не должны начинаться с чисел и не могут совпадать с име- 12 -
нами стандартных функций и служебных слов языка. Регистр в имени переменных не имеет значения. Если мы хотим, чтобы имя программы состояло из нескольких слов, то вместо пробела надо использовать знак соединения или каждое слово начинать с заглавной буквы. Примеры имени программы: моя_программа МyРrоgram МояПрограмма Мy_Рrogram Между первой и последней строками шаблона набираются остальные операторы программы. При этом можно пользоваться привычными командами редактирования (как в текстовом процессоре Word), а также буфером обмена. Ввод строки оканчивается нажатием клавиши Enter. Если для наглядности оператор нужно разместить на нескольких строках, то для переноса следует использовать комбинацию символов пробела и соединения « _» (после ввода этих символов надо нажать клавишу Enter). Если необходимо несколько операторов разместить на одной строке, то между ними надо поставить двоеточие «:». Помните, что после завершения ввода строки происходит ее проверка и корректировка с вводом дополнительных пробелов. Апостроф (запятая в верхней части строки) «’» означает, что следующая за ним информация (до конца строки) является комментарием, т.е. набором символов, который никак не влияет на выполнение программы. Если Вы готовите большую программу, то рекомендуется её комментировать, чтобы не забыть основной алгоритм и назначение используемых переменных. Более подробно остановимся на основных командах меню: · File (Alt+F) – содержит команды работы с файлами, печати и закрытия пакета. Наибольший интерес вызывают команды Import (Импорт) и Export (Экспорт), которые позволяют сохранить программный код в текстовом файле, а затем загрузить его в другой проект. Это позволяет использовать наборы заранее созданных программных заготовок и форм в других проектах. Команда Remove (Извлечь) позволяет удалить выделенный объект из проекта. При ее выполнении задается вопрос об экспорте данных (рис.4). Если объект больРис.4. Запрос на экспорт объекта ше не нужен, его можно - 13 -
просто удалить, если он не нужен только в данном проекте, но может пригодиться в другом, его можно перед удалением экспортировать в файл, ответив на запрос «Да». · Edit (Alt+E) – содержит несколько групп команд, связанных с редактированием текста программы: Краткая справка по командам и подменю меню Edit редактора VBA приведена в таблице. Там же можно видеть пиктограммы кнопок, которые присутствуют или могут присутствовать на панелях инструментов для ускоренного доступа к этим командам, равно как и сочетания клавиш, нажав на которые, можно выполнить данные команды. Команда или подменю
Undo … (Отменить) Redo … (Повторить) Сut (Вырезать) Сору (Копировать) Paste (Вставить)
Clear (Очистить)
Select All (Выделить все) Find (Найти) Find Next (Найти следующий)
Кноп- Сочетание ка клавиш
Описание
Ctrl+Z
Отмена выполненной команды. Иногда можно отменить ряд команд
Нет
Отмена последней команды Undo …
Вырезать выделенный фрагмент кода или объект и поместить в буфер обмена Копирование выделенного фрагменCtrl+C та кода или объекта в буфер обмена Вставка содержимого буфера обмеCtrl+V на, например, в модуль (код) или форму (элемент формы) Удаление фрагмента кода или элемента формы. При работе с кодом команда имеет название Clear (ОчиDel стить), а при работе с элементами форм отображается название Delete (Удалить) Выделение всего программного кода Ctrl+A в модуле или всех элементов на форме Команда поиска текстового фрагменCtrl+F та в модуле Поиск и выделение следующего F3 фрагмента текста или кода после первого найденного Ctrl+X
- 14 -
Команда или подменю
Replace (Заменить) Indent (Отступ) Outdent (Выступ) List Properties| Methods (Список свойств /методов ) List Constants (Список констант) Quick Info (Быстрая справка) Parameter Info (Параметры) Complete Word (Завершить слово)
Bookmarks (Закладки)
Кноп- Сочетание ка клавиш
Описание
Поиск текста и замена его на другой. Оба текста (искомый и текст замены) Ctrl+H указываются в диалоговом окне при выполнении команды Смещение строк выделенной части Таb кода вправо Смещение строк выделенной части Shift+Tab кода влево Вывод списка свойств или методов для введенного объекта после ввода Ctrl+J точки (.) в конце имени объекта Выводится список допустимых кон-
Ctrl+Shift стант для указанного объекта после +J
ввода знака равенства (=) Выводит список параметров для функций, процедур и других модуCtrl+I лей программы при наведении курсора на имя этого модуля Контролирует ввод необходимых Ctrl+Shift входных параметров при заполнении +I имен фактических параметров после имени процедуры Автоматическое завершение ввода ключевых слов. Выполняется только в Ctrl том случае, если введено достаточное +Space количество символов, позволяющих VBA идентифицировать это слово Подменю работы с закладками. Содержит команды Установить / Снять закладку (Toggle Bookmark), перейить к следующей закладке (Next Нет Bookmark), и к предыдущей (Previous Bookmark) и удалить все закладки (команда Clear All Bookmarks). - 15 -
Можно заметить, что первые две команды рассматриваемого меню (Undo и Redo, соответственно) отображены несколько необычно - команды выделены серым цветом (это означает, что они недоступны), к тому же перед этими командами появилось слово Can't, что в переводе означает невозможно. Объясняется все просто - поскольку в документе никакие операции с данными не производились, то и отменять нечего. В процессе работы, когда команды станут доступны, в соответствующей командной строке будет отображена не только сама команда, но и описание того действия, которое можно отменить или повторить. · View (Alt+V) – представлены команды и подменю, позволяющие настраивать внешний вид рабочего окна приложения Excel, перехода к подпрограммам и возврата к последней точке ввода текста. Команда или подменю
Code (Код) Object (Объект) Definition (Определение) Last Position (Последняя позиция курсора) Object Browser (Окно объекта) Immediate Window (Окно тестирования) Locals Window (Окно переменных) Watch Window (Окно просмотра)
Кноп- Сочетание ка клавиш
Описание
Отображение окна редактирования программного кода Отображение объекта, выбранного в Shift+F7 окне проекта Project Explorer Команда перехода на подпрограмму с Shift+F2 обращения к ней в программном коде F7
Ctri+Shift+ Быстрый переход к предыдущему F2 месту размещения курсора F2
Ctrl+G
Отображение окна Object Browser для доступных на данный момент объектов Отображение окна Immediate Window, полезного при отладке программных кодов. В него можно ввести программный код и выполнить его Отображение окна Locals Window, используемого при отладке программного кода для отслеживания значения переменных Отображение окна отладки Watch Window для просмотра значения выражений - 16 -
Команда или подменю
Call Stack (Стек вызова) Project Explorer (Окно проекта) Properties Window (Окно свойств) Toolbox (Элементы управления) Tab Order (Порядок перехода)
Toolbars (Панели инструментов)
Microsoft Excel
Кноп- Сочетание ка клавиш
Описание
Ctrl+L
Просмотр стека вызова подпрограмм Call Stack в режиме отладки в момент остановки выполнения программы на закладке
Ctrl+R
Отображение окна проекта Project Explorer
F4
Отображение окна свойств Properties Window Отображение панели с элементами управления форм
Отображение диалогового окна Tab Order, с помощью которого устанавливается порядок выполнения переходов (при нажатии клавиши Таb) между элементами формы Подменю содержит команды, позволяющие отображать: панель отладки Debug, панель редактирования Edit, стандартную панель инструментов Standard, панель формы UserForm и команду настройки панелей инструментов Customize Команда перехода к приложению Alt+F11 Excel. При этом редактор VBA остается открытым
· Insert (Alt+I) – содержит команды вставки всех возможных объектов в проект VBA. Это модули, оконные формы и процедуры. Так же можно вставить фрагменты программных модулей из файла. Команда или подменю
Procedure (Процедура)
Кноп- Сочетание ка клавиш
Описание
Команда вставки новой процедуры в модуль - 17 -
UserForm (Форма пользователя) Module (Модуль) Class Module (Модуль класса)
Команда добавления новой формы в проект Добавление нового модуля в проект Добавление в проект модуля класса Вставка в модуль файла, содержащего код VBA
File (Файл)
· Format (Alt+O) – содержит команды форматирования объектов на оконных формах, что существенно упрощает размещение этих объектов на форме и относительно других объектов. Замечание. Не все команды этого меню активны. Причина в том, что открыт новый рабочий документ. В процессе написания программного кода и работы с соответствующими объектами доступ к командам будет получен. Это же замечание относится и к командам прочих меню, как описанных выше, так и тех, о которых речь еще будет идти далее. Команда или подменю
Align (Выровнять)
Make Same Size (Установить размер) Size to Fit (Размер по заполнению) Size to Grid (Размер по сетке)
Кнопка
Описание
Выравнивание объектов относительно друг друга. Выравнивание выполняется: по левому краю (Lefts), по центру (Centers), по правому краю (Rights), по верхнему краю (Tops), по центральной линии (Middles) и нижнему краю (Bottoms) и по базовой сетке (То Grid) Подменю выравнивания размеров объектов позволяет для выбранных объектов сделать равными ширину (Width), высоту (Height) или оба размера (Both) Команда, которая устанавливает свойства автоматического выравнивания объекта под его содержание, что можно применить к окну ввода или вывода текстовой информации Команда, которая устанавливает свойства автоматического выравнивания объекта по сетке - 18 -
Команда или подменю
Horizontal Spacing (Расстояние по горизонтали)
Vertical Spacing Размер по вертикали) Center in Form (По центру формы) Arrange Buttons (Упорядочить кнопки) Group (Группировать) Ungroup (Разгруппировать) Order (Порядок)
Кнопка
Описание
Подменю изменения расстояния по горизонтали между выбранными объектами. Содержит команды: Make Equal (равное расстояние между объектами); Increase (увеличение расстояния между объектами на расстояние шага базовой сетки формы); Decrease (уменьшение расстояния между объектами на расстояние шага базовой сетки формы) и Remove (объекты сдвигаются по горизонтали друг к другу). Во всех случаях базовым считается объект, которому передан фокус (вокруг него рамка с белыми метками) Подменю содержит команды для изменения расстояния по вертикали между выделенными объектами. Команды такие же, как и для предыдущего подменю, только теперь все это имеет место вдоль вертикали Подменю содержит команду выравнивания выделенных объектов относительно центра формы по горизонтали (Horizontally) и вертикали (Vertically) В подменю представлены две команды выравнивания кнопок в форме: по нижней (Bottom) и правой (Right) границе Команда группировки объектов Команда отмены группировки объектов Подменю содержит команды, позволяющие изменять порядок отображения перекрывающихся объектов в форме. Эти команды таковы: Bring To From (переме- 19 -
Команда или подменю
Кнопка
Описание
щение объекта на передний план), Send To Back (перемещение объекта на задний план), Bring Forward (перемещение объекта на один уровень вперед) и Send Backward (перемещение объекта на один уровень назад). Если выделить несколько объектов, то один из них будет иметь прозрачные угловые курсоры, а у остальных черные. Объект с прозрачными курсорами является активным. · Debug (Alt+D) – набор команд для отладки программного кода. Команда или подменю
Кноп- Сочетание ка клавиш
Compile VBAProject (Компилировать) Step Into (Входить)
Step Over (Перешагивать)
Step Out (Выполнить до конца) Run to Cursor (Выполнить до курсора)
Описание
Команда компилирования проекта Команда пошагового выполнения F8 кода с исполнением внутренних процедур Команда пропуска трассировки подпрограмм, просто происходит ее вычисление. Если известно, что Shift+F8 подпрограмма работает правильно, то поиск ошибок в ней не нужен, и при трассировке ее можно пропустить из пошагового исполнения Выполнение оставшихся команд процедуры. Если вы убедились, что код подпрограммы работает Ctrl+Shift+ правильно и дальнейшее его исF8 полнение в пошаговом режиме просто трата времени, надо воспользоваться этой командой Ctrl+F8
Выполнение команд до строки, в которой размешен курсор
- 20 -
Команда или подменю
Кноп- Сочетание ка клавиш
Add Watch (Добавить для просмотра)
Edit Watch (Редактировать просматриваемые) Quick Watch (Быстрый просмотр) Toggle Breakpoint (Установить точку остановки) Clear All Breakpoints (Удалить все точки остановок) Set Next Statement (Определить следующую инструкцию) Show Next Statement (Показать следующую инструкцию)
Ctrl+W
Shift+F9
F9
Ctrl+Shirf+ F9
Ctrl+F9
Описание
Команда отображения диалогового окна Add Watch, где можно указывать переменные и выражения, значение которых проверяется в процессе выполнения программного кода Команда отображения диалогового окна Edit Watch, в котором можно редактировать переменные и выражения, отслеживаемые в процессе выполнения программного кода Отображение диалогового окна Quick Watch с текущим значением как выбранной переменной, так и целого выражения Выбор метки (точки) остановки выполнения кода Удаление всех меток остановки выполнения кода
Команда определения следующей выполняемой команды. Позволяет менять порядок выполнения команд исходного программного кода Команда выделения следующей выполняемой строки кода
- 21 -
· Run (Ctrl+R) – набор команд для выполнения программного кода. Команда или подменю
Кнопка
Run Macro (Запустить) Break (Приостановить) Reset (Сброс) Design Mode (Режим разработки)
Сочетание клавиш
Описание
Команда запуска макроса на выполнение Приостановка выполнения макCtrl+Break роса Сброс значений всех переменных к исходным значениям Переход в режим разработки и выход из этого режима (повторное выполнение команды) F5
Зафиксировав строку команды (Design Mode), вы указываете системе, что вы проектируете свою форму, и нет необходимости выполнять все события, которые в этот момент могут возникать на форме; · Tools (Ctrl+T) – содержит команды настройки системы программирования. Команда или подменю
References (Ссылки)
Additional Controls (Дополнительные элементы управления) Macros (Макросы) Options (Параметры)
Кнопка
Описание
Команда включения ссылок на программы, которые будут нужны в данном проекте. Например, мы хотим использовать текстовый процессор Word, который будет вызываться как объект в нашем проекте, тогда его надо найти в списке зарегистрированных программ и поставить галочку. После этого в проекте можно вызвать Word как объект, и увидеть все его свойства и методы Отображается диалоговое окно Additional Controls c элементами управления, которые можно добавлять в меню Тооls Открывается диалоговое окно Macros, в котором можно создавать, редактировать, запускать и удалять макросы В результате выполнения команды открывается диалоговое окно Options с четырьмя - 22 -
VBAProject Properties (Свойства проекта VBA) Digital Signature (Электронные подписи)
вкладками (Editor, Editor Format, General и Docking) (рис.4). С помощью этого окна можно задавать базовые настройки редактора Команда настройки свойств проекта, которая позволяет задать имя проекта, файлы помощи, которые нужно подключать к проекту, и закрыть проект паролем Отображается диалоговое окно Цифровая подпись, в котором задается цифровая подпись для проекта
Команда настройки оболочки (Options…) вызывает окно (рис.5), которое содержит несколько закладок, содержащих ряд настроек, которые можно изменить под себя. Рассмотрим их подробно: § Закладка (Editor) содержит настройки общей системы ввода программного кода. Здесь можно указать необходимость показа информации по параметрам процедур. Проводить контроль при вводе формальных параметров. Вывод Рис.5. Окно настроек, закладка Редактор свойств объекта, после ввода точки в его имени и показ констант при вводе знака равенства после имени свойства объекта. Все эти вспомогательные функции можно здесь отключить, сняв галочки перед ними, и вызывать эти функции принудительно соответствующими командами меню View. Здесь же задается размер табулятора, который определяет отступ в программном коде. § Закладка (Editor Format) настраивает форматирование окна с кодом программы, здесь задается имя, размер и начертание шрифта, а также выделение цветом различных объектов (служебные слова, идентификаторы) и состояний выполнения программного - 23 -
кода (закладки, точки останова, исполняемая команда и т.д.). Обычно нет необходимости изменять эти настройки, так как они хорошо продуманы. § Закладка (General) содержит ряд настроек, которые задают размеры сетки для форм пользователя и необходимость привязки объектов к ней, режимы редактирования, срабатывания на ошибки и компиляции программы. § Закладка (Docking) определяет какие из окон и панелей должны быть привязаны к определенным местам рабочей области экрана или располагаться поверх рабочей области экрана. Как несложно заметить, для команд меню Tools не предусмотрены комбинации клавиш, посредством которых эти команды вызываются. Принимая во внимание специфику выполняемых этими командами действий, можно порекомендовать в том случае, если настройки системы часто меняются, выносить на панель инструментов кнопки для соответствующих команд. Замечание. Здесь еще раз хочется напомнить, что даже если для команды не указана специальная пиктограмма, кнопку все равно можно разместить на панели инструментов. Делается это точно так же, как и в процессе настройки панелей инструментов приложения Excel. · Add-Ins позволяет включать Add-In объекты в проект. В этом меню находится всего одна команда, которая приводит к отображению диалогового окна Add-Ins Маnаgеr. Это окно позволяет регистрировать, загружать или выгружать и определять поведение дополнений. · Windows (Ctrl+W) – набор команд управления окнами, которые являются стандартными во всех приложениях MS Office. С их помощью можно различными способами расположить окна и выбрать любое из них. · Help (Ctrl+H) – команды вызова системы помощи и комментарии к пакету. Теперь кратко рассмотрим кнопки на панелях управления. Они дублируют основные команды меню. Панелей всего четыре: · первая Стандартная (Standard) содержит основные команды работы с файлами, редактирования, поиска и т.п. Она обычно расположена под строкой меню, однако при помощи мышки ее можно перетаскивать в другие области окна VB; - 24 -
· вторая панель Редактирование (Edit) включает команды работы с кодом и установки различных закладок. Команды простейшего текстового редактора: копирование и перемещение текста в буфер обмена, вставка текста из буфера, поиск и/или замена слов и фраз в тексте программы и т.д.; · третья панель Отладка (Debug) – команды по отладке кода; · четвертая панель Пользовательская форма (UserForm) содержит команды создания пользовательских окон. Как в любом пакете имеется команда Настройка… панелей инструментов, которая становится доступной в контекстном меню панели инструментов или строки меню. С ее помощью можно изменить набор кнопок любой из панелей. Для выяснения назначения любой кнопки достаточно просто зафиксировать на ней курсор и система выведет текстовый комментарий по команде, которая привязана к этой кнопке. Стандартные приемы программирования в среде VBA Введение Прежде чем перейти к основным приемам создания программ вспомним основные элементы программного кода и стандартные алгоритмы, которые обычно используются при программировании. При написании программного кода рекомендуется пользоваться структурированием записи, когда каждый внутренний цикл или оператор, который выполняется внутри предыдущего оператора, должен иметь отступ. Такой подход позволяет легче читать код. В нем сразу видно, что выполняется в следующий момент. Для увеличения отступа используется клавиша Tab, и клавиши Shift+Tab для его уменьшения. Для перемещения группы операторов можно пользоваться этими же клавишами, предварительно выделив фрагмент кода, который надо переместить. Размер табуляции можно задать в настройках Tools ð Options на закладке Editor в поле Tab Width. По умолчанию стоит значение 4 символа. Для оптимального использования памяти лучше явно описывать все переменные, которые используются в программе. По умолчанию все переменные имеют тип Variant, в котором можно хранить любые данные, но такой подход приведет к дополнительному выделению памяти для этой переменной. В языках программирования существуют ключевые (служебные) - 25 -
слова, которые используются только в конструкциях языка. Ключевые слова нельзя использовать в качестве имен программ и переменных в программах. По умолчанию среда VBA настроена таким образом, чтобы при наборе текста программы в окне кода все ключевые слова выделялись синим цветом, комментарии – зеленым цветом и синтаксические ошибки - красным. Отладка программы Отладка программы – важное и ответственное мероприятие. Для этого используются режимы пошагового исполнения программы, точки останова программы и опросы значений переменных или выражений. Чтобы запустить пошаговое исполнение программы надо встать курсором на заголовке исполняемой программы, и нажать клавишу F8. Текущая строка меняет цвет фона на желтый. Повторное нажатие клавиши F8 выполнит команды текущего оператора и перейдёт к следующему оператору. Иногда бывает удобно пропустить часть строк, которые уже были проверены. Для этого надо встать на последнюю проверенную строку программного кода и запустить исполнение программы воспользовавшись комбинацией клавиш Ctrl+F8. Система выполнит все строки программы и остановится на строке, где стоит курсор. Если вы отлаживаете программу, которая имеет внутренние подпрограммы и функции, то вы можете выполнить любую подпрограмму без захода в ее код, если воспользоваться комбинацией клавиш Shift+F8. Для выхода из подпрограммы надо пользоваться командой Ctrl+Shift+F8. В любой момент вы можете завершить исполнение программы либо, выполнив ее до конца командой Continue (F5), или просто прервать ее исполнение командой Reset. Если заранее известно проблемное место программы, то на этой строке можно поставить точку останова (Toggle BreakPoint). Для этого достаточно щелкнуть слева от этой строки на серой вертикальной полосе или просто нажать клавишу F9. Строка окрасится в коричневый цвет, а на вертикальной полосе появится кружок такого же цвета. После этого можно просто запустить программу, и как только текущей строкой станет отмеченная, программа остановится, и можно будет продолжить ее исполнение в пошаговом режиме. Для контроля над программой надо иметь возможность следить за значениями переменных. Для этого в момент остановки программы достаточно подвести курсор к имени переменной, и под курсором появится небольшая панелька с информацией о ее значении. - 26 -
Иногда для сложных объектов система не выдает такую подсказку, в этом случае можно воспользоваться окном Quick Watch (Shift+F9) (рис.6). Для этого надо выделить нужный объект или выражение, и нажать комбинацию клавиш Shift+F9. Если необходимо постоянно следить за Рис.6. Окно быстрого просмотра значений некоторыми переменными, то их лучше добавить в панель Watches командой Add Watch (рис.7). В ней можно указать область видимости переменных и условия остановки программы, реализуемой в двух вариантах: когда значение становится равным True или когда оно меняет значение. Рис.7. Окно добавления переменных на панель Watches Умение быстро и эффективно проводить режим отладки программы позволит вам хорошо разрабатывать сложные программы. Теперь остановимся на основных элементах языка программирования. Основные элементы программного кода в среде VBA Описание переменных Переменные в программировании имеют такой же смысл, как в математике. Перед тем, как использовать переменную, ее рекомендуется описать (объявить). Объявление переменных выполняется с помощью следующих описаний: · Dim – стандартное описание, описывающее переменные для данного объекта, в котором это описание используется; - 27 -
· Private – описание переменных только внутри объекта; · Public – описание переменных для нескольких однородных объектов при описании в одном из них. Видимость переменных будет определяться размещением их описания в проекте. Рассмотрим структуру проекта и области видимости переменных, в зависимости от места их описания (рис.8). В каждом из объектов (Лист1(Лист1), ЭтаКнига, UserForm1 и Module1) может находиться код программы и в нем область (General) (см. рис.2), которая содержит блок Рис.8. Дерево проекта (Declaration) для описания переменных. Для доступа к переменным во всем проекте, их надо объявить в Module1 с использованием описания Public, Dim описывает переменные для всех Modules, и использование Private описывает переменные только для текущего модуля. В других объектах (Лист1(Лист1), ЭтаКнига, UserForm1) можно использовать описание Dim, и обычно это описание касается только данного объекта. Попытка описания там общих переменных для всего проекта приводит к ошибкам или созданию различных переменных в разных модулях проекта, что делает программу неработоспособной. Иногда можно описать переменные с помощью Dim внутри подпрограмм, эти переменные будут видны только внутри данной процедуры. Такой подход используется, когда стандартная процедура сделана раньше и импортирована в данный проект, но имена переменных, которые используются в ней, уже имеются в этом проекте, и могут быть изменены при обращении к подпрограмме. Синтаксис оператора описания переменной: Dim переменная
· · · ·
[As тип]
В этой конструкции: Dim (Dimension - размер) - ключевое слово, свидетельствующее о том, что объявляется переменная; переменная - имя объявляемой переменной; Аs (как) - ключевое слово, используемое при задании типа данных; тип – тип данных для объявляемой переменной. - 28 -
Здесь и далее квадратными скобками выделяется необязательная часть конструкции (которая может отсутствовать). Когда при выполнении программы компьютер встречает оператор Dim, он выделяет переменной необходимую область своей оперативной памяти. Размер выделенной памяти, исчисляемый в байтах, определяется типом переменной. Одним оператором Dim можно описать несколько переменных, перечислив их через запятую. Пример: Dim i As Bite, j As Integer, k As Integer
При использовании русских букв следует иметь в виду следующее: хотя некоторые из них (а, е, о, р, с, у, х) имеют такое же написание, как английские буквы, для компьютера буквы с одинаковым русским и английским написанием - разные символы (литеры). Например, переменные с буквами «о», «с», «а», набранные русскими и английскими буквами, являются разными переменными, и при выполнении программы им отводятся разные ячейки оперативной памяти. Поэтому для снижения вероятности ошибок при написании программного кода лучше использовать либо только русские символы или только английские для написания имен переменных и программ. Типы данных Вуtе, Integer, Long, Сиrrеnсу, Single и Double называются числовыми типами данных. Согласно описанию переменной типа Вуtе в ячейке оперативной памяти компьютера могут храниться только числа от 0 до 255; · в ячейке, соответствующей переменной типа Integer или Long, могут храниться положительные и отрицательные целые числа; · в ячейке, соответствующей переменной типа Сиrrеnсу (Денежный), Sinlе (Одинарной точности) или Double (Двойной точноный), могут храниться числа с дробной частью. Если при описании переменной программист не указывает тип данных (например, Dim W), то переменной (W) автоматически будет присвоен тип Variant. Это означает, что в ячейке, соответствующей этой переменной, может храниться информация любого вида, т.е. тип Variant аналогичен формату «Общий» таблиц Excel. Рассмотрим оператор Dim i, j
Если мы хотим, чтобы обе переменные (i, j) имели тип Integer, то должны их описать так: Dim i As Integer, j As Integer - 29 -
Или в два оператора Dim i As Integer Dim j As Integer
Константы Наряду с переменными в VBA используются константы. Как и переменной, константе соответствует область оперативной памяти. Однако в отличие от переменной, содержимое ячейки, соответствующей константе, в программе изменить нельзя. Существует две разновидности констант - пользовательские и встроенные. Пользовательские константы требуют объявления. Для этого используется оператор вида Const константа [As тип] = значение
· · · · ·
В этом операторе: Соnst – ключевое слово, которое показывает, что объявляется константа; Аs – ключевое слово, с которого начинается задание типа данных; константа – имя объявляемой константы; тип - тип данных для объявляемой константы или тип константы; значение – значение, присваиваемое константе. Примеры объявления констант:
Const Const Const Const Const
pi As Double = 3.141592654 e As Double = 2.718282828 Message = "3aвершение paботы" MyDate As Date = #10 Jan 2008# beta As Currency = 1/4 При помощи одного оператора Const можно объявить несколь-
ко констант, перечислив их через запятую. В качестве примера использования констант рассмотрим следующую программу перевода угла (аnglе) из градусной меры в радианную: Public Sub deg2rad() Dim angleD As Double Dim angleR As Double Const pi As Double = 3.141592654 angleD = 270 'Угол равен 270 градусам angleR = angleD * pi/180'Угол в радианах End Sub - 30 -
Обратите внимание, что константа рi объявляется оператором
Const pi As Double = 3.141592654 перед использованием в операторе angleR = angleD * pi/180
Встроенные константы не требуют объявления. Имена встроенных констант Visual Basic начинаются с префикса vb. Слово «префикс» переводится с латинского как «стоящий перед корнем», «приставка». Например нам встретятся следующие встроенные константы: vbCr – перевод строки в текстовой переменной, vbRed, – красный цвет и др. Операторы присваивания Оператор присваивания имеет следующий синтаксис: переменная = выражение В нем переменная – имя переменной, выражение – арифмети-
ческое, логическое выражение или строка, которую можно рассматривать как выражение. Оператор присваивания работает следующим образом: 1) компьютер рассчитывает значение выражения выражение; 2) полученное значение записывается в ячейку оперативной памяти компьютера, соответствующую переменной переменная, т.е. присваивает этой переменной результат вычисления.
Арифметические выражения Одной из основных конструкций любого алгоритмического языка является арифметическое выражение, очень похожее на математическое выражение. Оно содержит постоянные (числа, константы), переменные и/или функции, соединенные между собой знаками арифметических операций. Отдельно взятое число, константа, переменная или функция также является арифметическим выражением. Согласно синтаксису оператора присваивания, арифметическое выражение находится справа от знака присваивания =. Пример. z=5 * х + 12 * у
Арифметические операции обозначаются так: + (сложение), - (вычитание, изменение знака), * (умножение), / (деление), ^ (возведение в степень), \ (целочисленное деление, т.е. деление целых чисел с отбрасыванием остатка), Моd (определение остатка от деления целых чисел, являющегося целым числом). - 31 -
Пример. Public Sub Арифметика1() Dim m As Integer Dim n As Integer Dim x As Double m = 5: n = 2 x = m/n 'Результат: х = 2.5 x = m\n 'Результат: х = 2 x = m Mod n 'Результат: х = 1 End Sub
При наличии в выражении нескольких арифметических операций порядок их выполнения определяется правилом приоритетов арифметических операций – наивысший приоритет имеют функции, потом идет возведение в степень, далее операции умножения и деления и в конце сложение и вычитание. В арифметических выражениях могут присутствовать величины (переменные и постоянные) разных типов. Если тип, полученный при вычислении арифметического выражения в правой части оператора присваивания (справа от знака присваивания =), не совпадает с типом переменной в левой части оператора присваивания (слева от =), то при выполнении оператора присваивания производится преобразование результата к типу переменной. Типичной является ситуация, когда значение арифметического выражения справа от знака присваивания имеет дробную часть, а переменная слева имеет тип Integer или Long. При этом в ходе выполнения присваивания происходит преобразование значения согласно следующему правилу округления: · если дробная часть значения равна или больше 0.5, то это значение округляется до ближайшего большего целого числа; · в противном случае значение округляется до ближайшего меньшего целого числа. При выполнении операций \ и Моd над дробными числами происходит округление операндов до целых чисел, т.к. операции \ и Mоd применимы только к целым числам. Округление производится согласно сформулированному правилу. Результаты выполнения операций \ и Моd являются целыми числами.
- 32 -
Логические выражения Помимо арифметических выражений, в VBA можно использовать логические выражения (утверждения), принимающие одно из двух значений типа Bоо1еаn — Тruе (истина, логическая единица) или False (ложь, логический нуль). Примеры логических выражений: 5 >= 3 5 < 3 False
Знаки >= и < являются известными знаками сравнения «больше или равно» и «меньше». Первое логическое выражение имеет значение Тruе, второе - False, третье - False. Согласно синтаксису оператора присваивания, логическое выражение находится справа от знака присваивания =. Пример. Программа с четырьмя операторами присваивания: Public Sub Dim x As Dim y As Dim blnA x = 5 y = 2 blnA = x blnA = x End Sub
Логика1() Integer Integer As Boolean > y 'Результат: blnA = Тrue = y 'Результат: blnA = False
В программе Логика1 два логических выражения: х > у и х = у. Их значения при х = 5 и у = 2 приведены в комментариях. Текстовые выражения Иногда бывает необходимо построить текстовые строки программно в зависимости от ситуации. Это тоже выражения и требуют знания определенных приемов. Для работы с текстовыми выражениями используется один оператор сцепления строк &. Его лучше всегда ограничивать пробелами. В этих выражениях очень часто используются константы. Например, в выражении, Name=”Вася” X=”Привет “ & Name & VbCr & “Как ты себя чувствуешь?”
представленном следующим образом Привет Вася Как ты себя чувствуешь?
- 33 -
vbCr – константа перевода строки.
Линейные программы Программы пишутся построчно. Все операторы имеют одинаковый отступ и выполняются последовательно друг за другом. Такие программы называются линейными. Ряд операторов, выполняющих идентичные операции, можно располагать в одной строке через «:». Это уменьшает число строк кода, и иногда позволяет легче читать программу, однако при возникновении ошибок надо будет анализировать какой из операторов этой строки содержит ошибку. Поэтому, если пишется большая программа, лучше каждый оператор размещать в отдельной строке кода, что существенно упрощает отладку программы и поиск в ней ошибок. Оператор перехода Для изменения последовательности выполнения операторов (т.е. для ветвления программы) используется оператор перехода GоТо, имеющий следующий синтаксис: GoTo метка
В этом операторе метка - это целое неотрицательное число без знака (0, 1, 2, 3, ...) или последовательность букв и цифр, начинающаяся с буквы (например, start53а). Перед оператором, на который должен быть осуществлен переход (или должно быть передано управление), ставится метка с двоеточием. После выполнения оператора с меткой выполняется оператор, следующий за ним, если помеченный оператор не GоТо. Если меткой является целое неотрицательное число, то это число еще называют номером оператора (строки). Конструкции принятия решений Типичной является ситуация, когда в определенном месте программы необходимо выполнить те или иные операторы в зависимости от некоторых условий. Выбор операторов осуществляется с помощью одной из двух конструкций принятия решений – If … Then и Select … Case.
- 34 -
Ветвление по условиям Первая конструкция принятия решений – If...Then, называется условным оператором. На русский язык «If...Then» переводится как «если...то». Существует несколько разновидностей этой конструкции. Простейший условный оператор: If условие Then оператор
В этой конструкции условие представляет собой логическое выражение. Компьютер рассчитывает значение этого логического выражения. Если оно является Тruе, то будем говорить, что условие истинно. Если значением является False, то будем говорить, что условие ложно. При истинности условия выполняется оператор оператор, находящийся после ключевого слова Then, при ложности оператор не выполняется. Далее выполняется оператор, следующий за конструкцией If...Then, вне зависимости от того, выполнен оператор или нет (если оператор не является оператором перехода GоТо). Рассмотрим следующую программу: Public Sub IT1() Dim X As Byte X = 12 'начальное значение X If (X > 9 And X < 12) Then X = X + 1 X = X + 2 X = X * 2'конечное значение X End Sub
Задание 1) Поставьте точку останова напротив строки End Sub; 2) запустите программу, кликнув на стрелке панели инструментов; 3) убедитесь в том, что в момент останова х равняется 28; 4) объясните этот результат; 5) кликните на стрелке на панели инструментов для окончания выполнения программы; 6) в конструкции If...Then измените условие так, чтобы в момент останова переменная х имела значение 30; 7) текст программы IТ1 верните в исходное состояние. Частным случаем рассмотренной конструкции If...Then является оператор условного перехода, включающий в себя оператор перехода GоТо. Синтаксис оператора условного перехода: If условие Then GоТо метка
- 35 -
Согласно этому оператору, при истинности условия происходит переход на метку метка и выполняется помеченный оператор. Пример Public Sub IT2() Dim X As Integer X = 12 2: If X > 9 And X < 12 Then GоТо LastLine X = X - 2 GoTo 2 LastLine: End Sub
Задание 1) Выполните программу IТ2 пошагово, следя за последовательностью выполнения операторов и изменением значения х; 2) объясните, почему значение х меняется так, а не иначе. Если при истинности условия требуется выполнить несколько операторов, то следует использовать конструкцию вида If условие Then операторы End If
Этот условный оператор работает таким образом. Если условие истинно, то выполняется блок операторов операторы, находящийся после ключевого слова Then. Если же условие Операторы до ложно, то блок операторы не выполняусловия ется. Далее выполняется оператор, следующий за служебным словосочетанием Истина Ложь Условие End If, вне зависимости от того, выОператоры Операторы полнен блок операторы или нет. До этого мы рассматривали операторы, имеющие одно условие, т.е. Операторы после условия неполные операторы, но операторы могут быть и полными (содержать оба условия). Алгоритм полного оператора Рис.9. Схема оператора показан на рис.9. If…Then Он может записываться в одну строку, если имеется не более чем по одному оператору на каждое из условий If Mx конец является False, то в этом случае операторы цикла выполняются первый раз. После этого происходит переход на начало цикла. Далее значение переменной счетчик увеличивается на величину шага шаг, после чего снова проверяется условие счетчик > конец. Если результатом является Falsе, то операторы цикла выполняются второй раз, и т.д. Выполнение цикла оканчивается, когда результатом проверки условия счетчик > конец становится Тruе. По окончании цикла выполняется оператор, следующий за циклом, т.е. за ключевым словом Next. Пример. Программа расчета факториал числа 6 имеет следующий вид: Public Sub Фaкториал1() Dim I As Byte Dim F As Long F = 1 - 40 -
For I = 1 To 6 Step 1 F = F * I Next I End Sub
Напомним, что факториал целого положительного числа n обозначается n! и (согласно определению) n! равняется произведению целых чисел от 1 до n: n! = 1 *2 * ... *n. Для результата отводится ячейка, в которую до начала простого цикла записывается 1, в данном случае F=1. Пример. Второй вариант программы расчета 6! Public Sub Фaкториал2() Dim I As Byte Dim F As Long F = 1 For I = 6 To 1 Step -1 F = F * I Next I End Sub
В случае отсутствия ключевого слова Step шаг изменения переменной счетчик полагается равным единице. В качестве параметров цикла начало, конец и шаг можно использовать не только числа, но и арифметические выражения. Важно, чтобы к моменту выполнения цикла For … Next все переменные в этих арифметических выражениях имели числовые значения (были определены). Зачастую требуется досрочно выйти из цикла. В этом случае цикл For … Next записывается в виде For счетчик = начало To конец [Step шаг] onepaтopы1 If условие Then Exit For onepaтopы2 Next [счетчик]
Досрочное окончание цикла обеспечивается оператором, обозначаемым служебным словосочетанием Exit For. Работает цикл следующим образом. При каждом значении переменной счетчик после выполнения блока операторы1 компьютер рассчитывает значение логического выражения условие. Если это значение равно False, то работа цикла продолжается. В противном случае работа цикла оканчивается: блок - 41 -
операторы2 не выполняется, а осуществляется переход на оператор,
следующий за циклом. Пример. Четвертый вариант программы расчета 6! Public Sub Фaктopиал4() Dim I As Byte Dim F As Long F = 1 For I = 1 To 13 Step 1 F = F * I If I = 6 Then Exit For Next I End Sub
Часто в примерах встречается задача накопления суммы, которая решается с помощью оператора цикла. Для результата, как и в случае вычисления произведения, отводится ячейка, в которую перед началом простого цикла записывается ноль, например S=0. Сумма накапливается в ячейке S путем многократного выполнения оператора присваивания S=S + слагаемое, который располагается внутри простого цикла. Результат получается в ячейке S по окончании работы простого цикла, т.е. печать S и другие действия с S выполняются после оператора Next. Пример Найдите сумму слагаемых вида 5х2, для х, изменяющегося от 5 до 15 с шагом 0,3. Public Sub Sum() S=0 For x = 5 To 15 Step 0.3 S=S+5*x^2 Next x End Sub
Существуют два варианта циклов – первый, который мы подробно рассмотрели ранее, выполняется по счетчику, определяемому в операторе. Второй вариант оператора – перебор всех объектов в коллекции (это все листы книги, ячейки листа или выделенного диапазона и др.). Этот оператор часто используется для работы со всеми листами книги, которые описаны коллекцией «Sheets» или других объектов. Записывается оператор следующим образом: - 42 -
For each Sh in ActiveWorkbook.Sheets … Next
Здесь нет в конце имени счетчика, переменная Sh является объектом коллекции. Цикл применяется в том случае, когда число выполнений операторов цикла заранее неизвестно. Синтаксис этого цикла: While условие oпepaторы Wend
Работа цикла While … Wend начинается с расчета значения логического выражения условие. Если условие = False, то работа цикла заканчивается, т.е. осуществляется переход на оператор, расположенный после ключевого слова Wend. Если условие = Тruе, то выполняются операторы цикла операторы. После этого опять рассчитывается значение логического выражения условие, и т.д. Пример. Пятый вариант программы расчета 6! Sub Факториал5() Dim I As Byte Dim F As Long F = 1: I = 1 While I