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

на главную

Жанры

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

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

Шрифт:

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

Объект выбирается из раскрывающегося списка объектов вверху слева в окне программного кода формы (рис. 10.25).

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

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

Рис. 10.25. Выбор элемента управления в окне программного кода формы перед началом создания процедуры обработки события

Как только из раскрывающегося списка процедур

будет выбрано событие, VBA немедленно перенесет вас прямо к процедуре его обработки. Если для события еще не создано никакого программного кода, VBA создаст для вас заготовку процедуры, разместив курсор ввода в пустой строке между оператором объявления процедуры и ее завершающим оператором (см. рис. 10.25). Если процедура обработки события уже содержит программный код, VBA просто поместит курсор ввода в его первую строку.

Вам не стоит беспокоиться об объявлении процедур, так как VBA делает это автоматически, когда вы выбираете событие в окне программного кода

Рис. 10.26 Только что созданная заготовка процедуры обработки события в окне редактора Visual Basic

Как влдно из рис. 10.26, синтаксис процедур обработки событий не отличается от синтаксиса обычных процедур типа Sub. Единственное, что отличает процедуру обработки события, так это ее имя. Чтобы процедура обработки события вообще функционировала, ее имя должно состоять из имени объекта (формы или элемента управления), за которым следуют символ подчеркивания и официальное имя события VBA. Посмотрите на следующие примеры:

Private Sub cmdCalcuiateSquareRoot_Click

End Sub

Private Sub UserForm_Activate

End Sub

Private Sub sclVolumeControl_Change

End Sub

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

Например, предположим, что вы создали процедуру обработки события Click (Щелчок) для кнопки, которой было автоматически присвоено имя CommandButtonl. Тогда именем процедуры будет CommandButtonl_Click. Спохватившись, вы изменили имя кнопки на более информативное, например cmdВернутьИзКорзины. Но после этого, до тех пор пока вы не измените оригинальное имя процедуры на cmdВернутьИзКорзины_Сliск, соответствующая кнопка во время выполнения будет просто торчать в форме тихо и безответно, независимо от того, сколько раз вы на ней щелкнете.

Поскольку при изменении имени кнопки VBA не удаляет соответствующие этой кнопке процедуры, вам не нужно создавать процедуру вновь, а нужно только изменить ее имя. Можно сделать и по-другому: начать новую процедуру обработки события для кнопки, а затем с помощью команд Cut (Вырезать) и Paste (Вставить) перенести программный код из оригинальной процедуры в новую.

Щелкните здесь...

В Windows щелчок ( Click) является квинтэссенцией всех событий. Вам приходится щелкать на пиктограммах, чтобы выбрать их, щелкать в документах - чтобы позиционировать

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

Очевидно, что каждая кнопка должна иметь процедуру обработки события Click, если вы хотите, чтобы кнопка делала что-нибудь полезное после щелчка на ней. Следующая процедура обработки события просто считает и отображает на экране число щелчков на кнопке:

Private Sub cmdCountClicks_Click

' Объявление переменней intCount статической сохранит

' ее значение в промежутках между вызовами процедуры

Static intCount As Integer

intCount - intCount + 1

cmdCount Clicks.Caption = "Вы щелкали на этой кнопке " _

& intCount & " р а з ( а )."

End Sub

Представленный здесь программный код достаточно ясен. При каждом выполнении процедуры, которое происходит только после щелчка пользователя на кнопке, знамение переменной intCount увеличивается на 3. Это значение используется в строке, которая отображается на кнопке с помощью свойства Caption кнопки. Кстати, объявление переменной intCount как статической заставляет VBA сохранять значение этой переменной между вызовами этой процедуры обработки события. Если объявить переменную с помощью ключевого слова Dim, переменная будет инициализироваться при каждом вызове процедуры. Вот процедура обработки события для кнопки с именем cmdMoveThisForm:

Private Sub cmdMcveThisForm_Click

Move(Left -24), (Top -24)

End Sub

Если вам это интересно, после щелчка пользователя на кнопке эта процедура смещает форму на 24 единицы вверх и на 24 единицы влево. В процедуре всего одна строка выполняемого программного кода, где метод Move используется без прямой ссылки на объект, - VBA предполагает, что ссылка указывает на главный объект формы, т.е. на саму форму. Если нужно вместо формы переместить содержащуюся в ней кнопку, используйте cmdMoveThisForm. Move, чтобы указать этот объект как целевой. Точно так же, если нет явной ссылки на объект, то подразумевается, что свойства Left и Тор относятся к форме.

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

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

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

Идеальный мир для Лекаря 6

Сапфир Олег
6. Лекарь
Фантастика:
фэнтези
юмористическая фантастика
аниме
5.00
рейтинг книги
Идеальный мир для Лекаря 6

Дракон с подарком

Суббота Светлана
3. Королевская академия Драко
Любовные романы:
любовно-фантастические романы
6.62
рейтинг книги
Дракон с подарком

Темный Патриарх Светлого Рода 6

Лисицин Евгений
6. Темный Патриарх Светлого Рода
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Темный Патриарх Светлого Рода 6

Падение Твердыни

Распопов Дмитрий Викторович
6. Венецианский купец
Фантастика:
попаданцы
альтернативная история
5.33
рейтинг книги
Падение Твердыни

Сержант. Назад в СССР. Книга 4

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

Измена. Право на сына

Арская Арина
4. Измены
Любовные романы:
современные любовные романы
5.00
рейтинг книги
Измена. Право на сына

Метка драконов. Княжеский отбор

Максименко Анастасия
Фантастика:
фэнтези
5.50
рейтинг книги
Метка драконов. Княжеский отбор

На границе тучи ходят хмуро...

Кулаков Алексей Иванович
1. Александр Агренев
Фантастика:
альтернативная история
9.28
рейтинг книги
На границе тучи ходят хмуро...

Ученичество. Книга 1

Понарошку Евгений
1. Государственный маг
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Ученичество. Книга 1

Энфис 2

Кронос Александр
2. Эрра
Фантастика:
героическая фантастика
рпг
аниме
5.00
рейтинг книги
Энфис 2

Не верь мне

Рам Янка
7. Самбисты
Любовные романы:
современные любовные романы
5.00
рейтинг книги
Не верь мне

Вечная Война. Книга II

Винокуров Юрий
2. Вечная война.
Фантастика:
юмористическая фантастика
космическая фантастика
8.37
рейтинг книги
Вечная Война. Книга II

Неудержимый. Книга III

Боярский Андрей
3. Неудержимый
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Неудержимый. Книга III

Энфис 6

Кронос Александр
6. Эрра
Фантастика:
героическая фантастика
рпг
аниме
5.00
рейтинг книги
Энфис 6