Чтение онлайн

на главную - закладки

Жанры

VBA для чайников

Каммингс Стив

Шрифт:

Но, как говорится, содрать с капусты листья можно многими способами. В нашем случае есть варианты- события Initialize (Инициализация) и Activate (Активизация) формы.

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

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

* Используйте событие Activate для программного кода, который должен выполняться при каждом отображении формы на экране (включая и первое отображение).

Создание программного кода для процедур обработки событий обсуждается ниже, в разделе "Главные события".

Используйте метод Hide (Скрыть), чтобы закрыть форму и таким образом получить возможность вернуться в документ VBA-приложения или активизировать другую форму. Это делается следующим оператором:

FormErly.Hide

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

Как упоминалось раньше в настоящей главе, если открыта модальная форма, выполняться могут только процедуры, связанные с этой формой.

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

Чаше всего оператор Hide размещают в конце процедуры обработки события Click (Щелчок) для КНОПОК ОК, Отмена или Закрыть. Примеры вы найдете ниже, в разделах

"Добавление кнопок Закрыть и Отмена" и "Программирование кнопки ОК".

Скрытая форма не удаляется из памяти, вы сможете отобразить ее снова без лишних задержек с помощью метода Show в любое время.

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

Как и для загрузки формы, для выгрузки формы из памяти используется не метод, я оператор Unload Formation.

Выгрузка формы удаляет ее и с экрана, если до этого форма была видима.

Если известно, что форма больше в программе не понадобится, замените метод Hide в процедурах обработки событий формы на оператор Unload. В этом случае оператор Unload Me эквивалентен оператору Unload имя_формы, поскольку ключевое слово Me представляет текущую форму.

Однако, в отличие от метода Hide, оператор Unload применим и к модальным формам, которые не присутствуют на экране. С помощью оператора Unl oad, размещенного в главной части программы (т.е. в процедуре, не связанной с формами), можно выгружать любые формы, в том числе и скрытые модальные формы.

Главные события

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

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

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

Формы VBA и элементы управления в них могут распознавать самые различные события. (На жаргоне VBA, когда говорится, что объект "имеет" события, подразумевается, что объект может регистрировать и распознавать эти события.) У форм и элементов управления есть одинаковые события, но набор событий каждого объекта индивидуален. Часто встречающиеся события приведены в табл. 10.1.

Таблица 10.1. Избранные события форм и элементов управления

Событие

Объекты, которые распознают событие

Когда происходит событие

Activate

Формы

Каждый раз, когда форма активизируется (получает фокус ввода)

AddControl

Формы, фреймы и формы с множеством страниц

При добавлении в объект элемента управления во время выполнения формы

AfterUpdate

Все "действующие" элементы управления, кроме кнопок

После установки нового значения для элемента управления, в момент перехода от данного элемента управления к другому

Change

Все "действующие" элементы управления, кроме кнопок

При изменении значения свойства Value элемента управления

Click

Формы и все типы элементов управления

После щелчка кнопкой мыши на объекте

DblClick

Формы и все типы элементов управления

После двойного щелчка кнопкой мыши на объекте

DropButtonClick

Текстовые поля и поля со списком

При появлении раскрывающегося списка (после щелчка на кнопке раскрытия или нажатия клавиши <F4>)

Enter

Все типы элементов управления

Непосредственно перед тем, как элемент управления получит фокус ввода от другого элемента управления в той же форме

Error

Формы и все типы элементов управления

Когда возникает ошибка, но информация о ней не может возвратиться программе

Exit

Все типы элементов управления

Непосредственно перед тем, как фокус ввода перейдет от данного элемента управления к другому в той же форме

KeyUp, KeyDown, Keypress

Формы и все типы элементов управления

При нажатии или отпускании кнопки

Layout

Формы, фреймы и формы с множеством страниц

При изменении размеров объекта

RemoveControl

Формы, фреймы и формы с множеством страниц

При удалении элемента управления из объекта во время выполнения формы

Scroll

Формы, фреймы и формы с множеством страниц, а также текстовые поля, списки и поля со СПИСКОМ

При изменении положения бегунка полосы прокрутки

Zoom

Формы, фреймы и формы с множеством страниц

При изменении масштаба объекта (значения свойства Zoom)

Программирование обработки событий

Как видно из табл. 10.1, формы и элементы управления могут отвечать на многие события. Но когда форма действительно отвечает на какое-нибудь конкретное событие? Только тогда, когда она имеет соответствующую процедуру для этого события. Процедуры обработки событий должны быть кем-то созданы - в данном случае вами.

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

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

1. Откройте окно программного кода формы.

Двойной щелчок на форме или любом ее элементе управления - самый короткий путь для этого. Иначе можно выделить форму и выбрать View=Code из контекстного (вызываемого щелчком правой кнопки мыши) меню для формы или элемента управления, с которыми вы собираетесь работать, или же нажать <F7>, когда форма выделена в ее окне UserForm.

Поделиться:
Популярные книги

Изгой Проклятого Клана. Том 2

Пламенев Владимир
2. Изгой
Фантастика:
попаданцы
аниме
фэнтези
фантастика: прочее
5.00
рейтинг книги
Изгой Проклятого Клана. Том 2

Прапорщик. Назад в СССР. Книга 6

Гаусс Максим
6. Второй шанс
Фантастика:
попаданцы
альтернативная история
5.00
рейтинг книги
Прапорщик. Назад в СССР. Книга 6

Подросток

Достоевский Федор Михайлович
Проза:
русская классическая проза
9.09
рейтинг книги
Подросток

Драконы

Мартин Джордж Р.Р.
Фантастика:
фэнтези
8.08
рейтинг книги
Драконы

Изгой

Майерс Александр
2. Династия
Фантастика:
фэнтези
попаданцы
рпг
аниме
5.00
рейтинг книги
Изгой

Убей героя

Кудрявцев Леонид Викторович
Фантастика:
детективная фантастика
5.00
рейтинг книги
Убей героя

Полигон

Гостева Ирина
S.T.A.L.K.E.R.
Фантастика:
боевая фантастика
7.78
рейтинг книги
Полигон

Властелин Севера

Корнуэлл Бернард
3. Саксонские хроники
Приключения:
исторические приключения
8.67
рейтинг книги
Властелин Севера

Темный Лекарь 9

Токсик Саша
9. Темный Лекарь
Фантастика:
попаданцы
аниме
фэнтези
5.00
рейтинг книги
Темный Лекарь 9

Эпоха Опустошителя. Том VI

Павлов Вел
6. Вечное Ристалище
Фантастика:
аниме
фэнтези
попаданцы
5.00
рейтинг книги
Эпоха Опустошителя. Том VI

Эпоха Опустошителя. Том I

Павлов Вел
1. Вечное Ристалище
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Эпоха Опустошителя. Том I

Кодекс Охотника. Книга XVII

Винокуров Юрий
17. Кодекс Охотника
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Кодекс Охотника. Книга XVII

Матабар

Клеванский Кирилл Сергеевич
1. Матабар
Фантастика:
фэнтези
5.00
рейтинг книги
Матабар

Лейтенант. Назад в СССР. Книга 8. Часть 1

Гаусс Максим
8. Второй шанс
Фантастика:
попаданцы
альтернативная история
5.00
рейтинг книги
Лейтенант. Назад в СССР. Книга 8. Часть 1