VBA. Практическое программирование
.pdf
Переходим к VBA
Рис. 1.1. Панель элементов управления
ходятся три кнопки —»Режим конструктора», «Свойства», «Исходный текст». Нажав на кнопку Исходный текст мы попадаем в среду программирования VBA.
Но прежде чем туда отправиться, давайте запомним очень важное правило — все наши программы и макросы будут работать, если кнопка «Режим конструктора» будет отжата, и в противном слу- чае мы можем заниматься конструированием наших элементов управления, но программу запустить не сможем.
Что же касается кнопки Свойства то она открывает для нас окно свойств различных объектов и элементов управления. Обращаем внимание на то, что эти кнопки могут встречаться не только в этой панели, но и в других панелях. Назначение этих кнопок, естественно такое же.
Вторая часть этой панели содержит кнопки — символы, относящиеся к различным элементам управления, с которыми мы будем знакомиться позже. И, наконец, в третьей области располагается одна кнопка «Дополнительные элементы», которая позволяет расширить список используемых элементов управления.
Итак, нажав кнопку Исходный текст переходим в среду программирования VBA. В этой среде нам и предстоит писать коды программ. Сначала, для определенности выберем View/Project Explorer. С левой стороны Вы должны увидеть появившееся (или оно уже было) окно проектов, в котором в виде дерева отображаются названия открытых Вами книг, а также стандартных шаблонов. Работая в этом окне, так же как и с деревом каталогов в Проводнике Windows, Вы можете раскрыть содержание Вашей книги, увидеть ссылки на рабочую книгу в целом, и на каждый рабочий лист этой книги. Кроме того, Вы можете увидеть, что дерево также содержит и модули.
Выбрав одну из строчек в этом дереве, Вы справа получите раскрытое окно кода для данного элемента рабочей книге. Также это окно можно раскрыть через View/Code. Другими словами, если вы собираетесь писать программу для конкретного рабочего листа, то Вы в окне проекта должны выбрать строку с название этого листа, и тогда раскроется окно кода именно для этого рабочего листа. Если Вы захотите написать код в модуле, то тогда выбирайте
11
1. Основы VBA
Рис. 1.2. Среда программирования VBA
модуль, или Вы можете создать его. Вставить новый модуль можно либо через команду Insert/Module либо через контекстное меню, находясь в окне проекта. Итак, мы можем работать с окном проекта или с окнами кодов для различных объектов или модулей. Кроме того, можно вызвать окно свойств либо через соответствующую кнопку на верхней панели кнопок, либо через View/Properties Window.
Обратим внимание на команды в главном меню, которые могут понадобиться в первую очередь. В разделе «Edit» («Правка») располагаются команды, которые будут Вам полезны при написании кодов программы и выполняют функции форматирования, но также имеет смысл обратить внимание на строчки «List Properties/Methods» («Список свойств/методов») и «List Constants» («Спи-
12
Объекты, их свойства, события и методы
сок констант»). С помощью этих команд Вы получаете справоч- ную информацию о возможностях языка программирования.
Команда меню «View» («Вид») позволяет Вам открывать различные объекты Вашего проекта, описывать их свойства, просмотреть используемые объекты и скрывать или раскрывать различные панели, а также управлять режимом отладки.
Команда меню «Insert» («Вставка») позволяет вставить в проект новые элементы (см. содержание этой компоненты меню).
Команда «Format» («Формат») позволяет управлять расположением выделенных Вами в режиме конструктора элементов управления, то есть реализовывает хорошо известные команды форматирования.
Команда «Debug» («Отладка») используется в режиме отладки проекта.
Особый интерес представляет интерес команда «Run» («Запуск»). Здесь необходимо отметить следующее. Иногда возникают ситуации, когда выполнение программы по каким либо причинам прерыва-
ется, и программа находится в режиме отладки или паузы. Но поль-
зователь или программист об этом забывает и никак не может запустить программу вновь. Давайте запомним, что если программа почему-то не запускается (хотя Вы не находитесь в режиме конструктора), то, скорее всего, необходимо нажать кнопку «Reset» («Сброс»), чтобы иметь возможность запустить программу сначала.
Не будем подробно останавливаться на командах «Tools» («Сервис») и «Windows» («Окно»), так как их назначение достаточно прозрачно. Отметим только, что команда «Tools/Option» («Сервис/Параметры») относится к установке параметров самой среды программирования, а команда «Tools/VBAProject Properies» («Сервис/Свойства проекта») позволяет установить ряд свойств Вашего проекта, и в частности установить на него защиту от вмешательства «нехороших людей».
Объекты, их свойства, события и методы
Теперь наступила пора познакомиться с объектами, событиями, свойствами и методами VBA. К объектам в первую очередь можно отнести те элементы различных приложений, которыми Вы пользуетесь при работе на компьютере. Это хорошо известные Вам кнопки, полосы прокрутки, различные иконки, строки в
13
1. Основы VBA
меню. Объектами также являются окна, которые Вы располагаете на рабочем столе. Всякий раз, когда Вы, перемещая курсор мышки на объект, делаете щелчок одной из клавиш, Вы создаете событие. К событиям также относится нажатие клавиши или комбинации клавиш. Событие возникает и в тот момент, когда открывается или закрывается какое-нибудь окно. Во время этих событий и могут срабатывать те программы или процедуры, которые Вы запишете в виде команд. Таким образом Ваши процедуры должны быть связаны с какими-либо событиями, в свою очередь связанными с различными объектами. Иногда процедуры размещают в отдельных модулях и вызывают определенными командами. Совокупность процедур, предназначенных для выполнения какой-либо определенной задачи, объединяется в проект.
Большинство программ или проектов условно состоят из трех этапов — ввод данных, их обработка и вывод полученных результатов. Для ввода данных в большинстве языков программирования существуют свои объекты и команды.
Преимуществом VBA, как языка программирования является то, что в качестве источника данных могут быть использованы ячейки электронной таблицы Excel или фрагменты текста документа в Worde. Поэтому мы сначала (это просто необходимо для дальнейшей работы) познакомимся с таким важным объектом как Range. В ЭТ смысл этого объекта — диапазоны ячеек, в текстовом документе — фрагмент текста. Сейчас поговорим подробнее о диапазоне ячеек. В программе ячейки того или иного диапазона могут быть обозначены несколькими вариантами
через прямую адресацию: Range (''A1:B3''),
через имя диапазона Range(''itogi''),
через стандартный выделенный программно или вручную Range-объект: ActiveCell èëè Selection.
через объект Cells(номер строки, номер столбца).
Ячейки, помимо того, что могут содержать различные данные, имеют различные свойства, которые можно менять непосредственно на рабочем листе, предварительно выделив диапазон ячеек. Например, можно менять размеры ячеек, шрифт внутри, фон, можно выделив одну ячейку, удалить всю строку или весь столбец, также можно произвести автозаполнение и т. д. В режиме программы также можно обратиться к свойствам объекта Range, определить или поменять их значения, написав соответствующие про-
14
Объекты, их свойства, события и методы
цедуры, а также применить различные методы. Познакомьтесь с примерами.
Строка в программе Cells(3,6) = 23 означает, что ячейке, расположенной в третьей строке и в шестом столбце нужно присвоить значение 23, но если мы напишем Range(''B3:F10'').Cells(3,6) = 23, то число 23 появится в третьей строке и шестом столбце, которые нужно будет отсчитывать от ячейки В3.
Строка Range(''D5'').EntireRow.Delete означает, что необходимо удалить всю 5-ю строку, в которой находится ячейка D5. В данном случае команда содержит указание на объект (строку) и метод (Delete), который должен быть применен к этому объекту. Все рассмотренные команды будут применены к ячейкам того листа, для которого записаны процедуры с этими командами.
Мы имеем возможность обращаться к ячейкам, расположенным на любом листе рабочей книги. В этом случае необходимо предварительно указывать конкретный рабочий лист. Например, выполнение команды Worksheets(3).Range(''A5:A10'').Clear. приведет к очистке содержимого ячеек указанного диапазона, расположенных на третьем листе рабочей книги. Итак, если мы хотим применить метод к какому либо объекту, то команда должна выглядеть в общем виде следующим образом.
Имя объекта. Метод
Для каждого объекта существуют свои методы и сведения о них можно найти в справочной системе VBA.
Если мы в программе захотим поменять какие-нибудь свойства объектов, то нужно помнить, что свойство имеет какое-то определенное значение (красный фон ячейки, размер шрифта — 12, числовое значение в ячейке — 23). Чтобы задать значение свойства какого-либо объекта, то необходимо использовать код в следующей форме:
Имя объекта. Свойство = Значение свойства
Для записи в переменную значения какого-либо свойства код должен выглядеть так:
Имя переменной = Имя объекта. Свойство.
15
1. Основы VBA
Стандартные элементы управления
К важным объектам VBA относятся элементы управления. Они необходимы для организации работы с приложениями, для запуска различных процедур, получения или передачи информации и так далее. Стандартные элементы управления можно применить, используя панель элементов управления. Для дальнейшей работы Вам необходимо открыть чистую рабочую книгу в электронной таблице и все дальнейшие действия производить на «Листе1». Итак, выполним следующие действия.
Упражнение 2
1.Вызовите через команды Вид/Панели инструментов/Элементы управления панель элементов управления (в дальнейшем ПЭУ), а в этой панели вызовите окно свойств. В окне свойств Вы увидите перечень свойств рабочего листа, в котором Вы находитесь, но нас пока будут интересовать именно элементы управления.
2.Найдите на ПЭУ кнопку с буквой А и с подсказкой «Надпись», щелкните по ней и когда курсор примет вид крестика расположите этот элемент на рабочем листе. В принципе Вы должны выполнить те же действия, что и при расположении на листе линий, кругов, квадратов и других объектов рисования. Удаление, изменение размеров элементов управления производятся теми же приемами, что и для объектов рисования.
Как только вы расположили элемент управления на рабочем листе, он будет выделен, а окно свойств будет содержать список и значения свойств именно этого элемента управления. Познакомимся подробнее с элементом управления «Надпись», в качестве примера. Его официальное название Label (Это видно в верхней строке окна свойств), а имя элемента управления — Label1.
Обращаем Ваше внимание на различие между названием и именем. Имя можно будет менять (но только в начале работы над проектом, пока еще не перешли к написанию кода).
Далее идет целый перечень различных свойств этого элемента. Эти свойства могут иметь либо числовое значение, либо «True» или «False» (соответственно «Да» или «Нет»), либо текстовое, или содержать имя файла изображением, которое необходимо поместить на этот элемент управления. Можно, поместив курсор в правую колонку окна свойств, изменить некоторые свойства этого
16
Стандартные элементы управления
элемента. В частности, попробуйте поменять содержание свойства Caption. Это свойство отображает тот текст, который будет находиться на этом элементе управления. И опять важное замечание — нельзя путать свойство Name («Имя») со свойством Caption («Сообщение»). Имя каждого объекта уникально, присваивается один раз по определенным правилам, и в дальнейшем не изменяется, в то время как сообщение, которое может содержать этот элемент может меняться в процессе выполнения программы.
Правила для создания имен следующие:
Длина имен не должна превышать 256 символов.
В имени можно использовать любую комбинацию букв, цифр и символов, но оно должно начинаться с буквы. Настоятельно рекомендуем применять латинские символы и не использовать кириллицу.
Имена не должны включать точек, пробелов и следующих символов: % & ! # @ $
Имена должны быть уникальны внутри области, в которой они определены.
Изменение имени крайне нежелательно, так как это приводит к необходимости проверять весь проект на корректность при ссылках на это имя
Регистр букв в именах не имеет значения. Это означает, что имя, написанное заглавными буквами, и то же имя, написанное строчными буквами, являются эквивалентными.
Чтобы исключить путаницу, все одинаковые, но написанные в разном регистре имена автоматически приводятся к одному образцу.
Имя должно быть таким, чтобы нести в себе полезную дополнительную информацию о типе и назначении объекта
Продолжим наше упражнение (элемент управления должен быть выделен).
3.Расположите курсор в правом столбике окна свойств в строке Name и наберите любое имя в соответствии с правилами. Переместив курсор из этой строки в любую другую, убедитесь, что в самой верхней строке окна свойств появилось имя, созданное Вами.
4.Теперь расположите курсор в строке Caption и наберите любой текст. Как только курсор покинет строчку с набранным тек-
17
1. Основы VBA
стом, Вы увидите набранное Вами сообщение на элементе управления.
Вы сейчас меняете свойства элемента управления, работая в режиме конструктора, и даже еще не приступали к процессу написания кода.
Таблица 1 содержит свойства, практически общие для всех элементов управления.
Таблица 1
|
Общие свойства элементов управления |
|
|
|
|
Название |
|
Пояснения |
|
|
|
Name |
|
Имя объекта |
BackColor |
|
Определяет цвет фона |
BorderColor |
|
Определяет цвет линий или рамки объекта |
Caption |
|
Сообщение на объекте |
Enabled |
|
Разрешает или запрещает объекту реагировать на |
|
|
действия пользователя |
Font |
|
Содержит в себе объект Font, чьи свойства определяют |
|
|
различные параметры шрифта |
ForeColor |
|
Цвет переднего плана объекта |
Picture |
|
Определяет название файла, содержащего рисунок, |
|
|
который может быть расположен на поверхности объекта |
Value |
|
Возвращает значение, содержащееся в объекте* |
Visible |
|
Делает объект видимым или невидимым |
Height |
|
Высота объекта |
Width |
|
Ширина объекта |
Left |
|
Расстояние от левой границы листа до объекта |
Top |
|
Расстояние от верхней границы листа до объекта |
|
|
|
* — Тип этого свойства зависит от типа объекта.
И теперь давайте завершим упражнение.
5. Используя таблицу 1 попробуйте поменять другие свойства элемента Label
Элемент Label — самый простой элемент и чаще всего предназначается именно для вывода сообщений и размещения картинок в процессе выполнения программы.
Перечислим другие стандартные элементы и при этом отметим, что со всеми этими элементами Вы уже встречались, работая с офисными приложениями.
18
Стандартные элементы управления
Командная кнопка CommandButton — основное назначение объекта состоит в реагировании на щелчок мыши и вызов процедуры, обрабатывающей это событие.
Рисунок Image — служит для размещения рисунка, загружаемого из графического файла. Особые свойства:
PictureAlignment — определяет режим выравнивания рисунка в границах объекта,
PictureCizeMode — определяет режим согласования размеров рисунка и размеров элемента управления,
PictureTiling — разрешает размножение рисунка по всей поверхности объекта, если размер рисунка меньше размеров объекта,
SpecialEffect — Определяет вид самого элемента управления.
Поле списка ListBox — служит для представления данных в форме развертывающегося списка. Позволяет пользователю выбрать один или несколько элементов из списка. Особые свойства:
ColumnCount — задает количество столбцов в списке,
ListCount — возвращает число элементов списка,
ListStyle — определяет вид элементов списка,
MultiSelect — разрешает или запрещает выделение нескольких элементов списка одновременно,
TextColumn — определяет номер столбца, для которого элемент выделенной строки будет отображаться в текстовом поле.
Ïîëå TextBox — предназначено для ввода текста пользователем. Особые свойства:
Text — содержит в себе текст, введенный в поле,
LinkedCell — указывает на ячейку в рабочем листе, которая повторяет свойство Text, указывает на ячейку, связанную с этим объектом,
TextAlign — способ выравнивания текста в окне.
Полоса прокрутки ScrollBar — предназначена для ввода числовых значений без помощи клавиатуры. Особые свойства:
Min, Max — соответственно минимальное и максимальное числовое значение диапазона вводимых значений,
Value — числовое зачение, которое хранит элемент управления.
19
1. Основы VBA
Кнопка — счетчик SpinButton — подобно полосе прокрутки позволяет вводить числовые значения без помощи клавиатуры.
Кнопка выключатель ToggleButton — кнопка, после щелчка на которой, остается нажатой до очередного щелчка. Состояние кнопки отражается в свойстве Value со значениями «True» или «False»
Переключатель OptionButton — обеспечивает выбор одного элемента из нескольких. Для объединения нескольких элементов в одну группу необходимо их свойству GroupName присвоит одинаковое значение.
Флажок CheckBox — элемент, который моет иметь два значе- ния — «True» или «False».
Структура проекта на языке VBA
Напомним, что согласно смыслу объектно-ориентированного программирования программа состоит из ряда процедур, которые располагаются в отдельных модулях или связаны с определенными объектами. Сначала остановимся на процедурах, связанных с объектами, а именно с элементами управления. Особенность этих процедур заключается в том, что они начинают выполняться после какого — либо события, совершенного пользователем. В таблице 2 перечислены наиболее распространенные события, которые могут быть использованы для запуска процедур.
Таблица 2
Наиболее распространенные события
Название |
Пояснения |
|
|
Activate |
Активизация объекта |
Change |
Изменение на объекте |
Click |
Щелчок по объекту |
DblClick |
Двойной щелчок |
Deactivate |
Деактивизация объекта |
GotFocus |
Получение фокуса |
Initialize |
Инициализация |
KeyDown |
Клавиша вниз |
KeyPress |
Клавиша нажата |
KeyUp |
Клавиша вверх |
|
|
20
