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

на главную

Жанры

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

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

Шрифт:

cmdПоказФокусов_Click

вы даете указание выполнить процедуру, по сути, заставляя VBA думать, что случилось соответствующее событие.

По умолчанию процедуры обработки событий локальные ( Private), т.е. при создании процедуры VBA автоматически добавляет в начало ее объявления ключевое слово Private. В таком случае выполнять эти процедуры можно только из программного кода, связанного с данной формой.

Однако ничто не мешает вам удалить ключевое слово Private и напечатать вместо него Public. Тогда вы сможете вызывать соответствующую процедуру обработки события и из любой другой части программы. Здесь кроется одна тонкость: прежде чем вызывать открытые ( Public) процедуры

формы, форму нужно загрузить в память (но не обязательно показывать на экране).

Когда не нужно создавать процедур обработки события Click

Большинство элементов управления VBA распознают событие Click. Но, за исключением кнопок, обычно нет необходимости и даже неразумно создавать процедуру обработки события Click, даже если нужно, чтобы объект отвечал на щелчки кнопки мыши. Причина в том, что эти элементы управления отвечают на щелчки автоматически и обычно так, как требуется.

Предположим, вы поместили в форму VBA несколько кнопок. После запуска формы на выполнение щелчок на кнопке выделяет эту кнопку и для этого не требуется никакого программирования. Точно так же VBA автоматически обрабатывает щелчки на кнопках выключателей и переключателей. VBA знает, что щелчок должен изменить состояние элемента управления на противоположное, если для элемента управления предусмотрено только два состояния (состояние включен/выключен- для выключателя, отмечен/не отмечен- для флажка и т.д.). А после щелчка в поле текста этот элемент управления автоматически перемещает курсор ввода в то место, где вы щелкнули.

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

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

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

Для этого нужно поместить программный код соответствующих действий в процедуру обработки события Click формы:

Private Sub UserForm_Click

...(программный код, инициируемый событием)

End Sub

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

мышью, работают аналогично.

Для элементов управления типа полос прокрутки, кнопок прокрутки переключателей и выключателей главным событием является событие Change. Эти элементы управления реагируют на щелчки мыши и нажатия клавиш, но реагируют автоматически. VBA вместе с Windows делают всю "грязную" работу по изменению внешнего вида элемента управления и изменению его установок в соответствии с тем, какие клавиши или какие кнопки мыши были нажаты.

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

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

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

Используйте события Keypress, KeyDown и KeyUp, чтобы отвечать на нажатия клавиш пользователем. Событие Keypress удобно использовать для распознавания клавиш с обычными "печатаемыми" символами (буквы, числа, знаки пунктуации), когда нужно обработать информацию, вводимую в текстовое поле или в поле со списком. С помощью этого события распознаются также многие из комбинаций типа <Ог1+клавиша>, а также клавиша <Backspace>. Немного позже я покажу, как проверить или изменить напечатанный символ с помощью процедуры обработки события KeyPress.

События KeyDown и KeyUp, напротив, распознают практически любую посылаемую им комбинацию клавиш, включая выкрутасы типа <Alt+Shift+CtrI+F9>. С этими событиями работать труднее, чем с KeyPress, но зато они позволяют использовать более широкий набор сочетаний клавиш. Например, можно создать процедуру обработки события KeyDown, которая позволяет с помощью комбинаций <Ctrl+<-> и <Ctrl+->> соответственно уменьшать или увеличивать значение полосы прокрутки, например, на 10.

Основные приемы программирования форм

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

Большинство диалоговых окон имеют, как минимум, одну кнопку главной команды и кнопку, убирающую диалоговое окно с экрана. В зависимости от того, что делает диалоговое окно, на этой кнопке обычно написано либо Закрыть, либо Отмена, но вполне допустимы и другие надписи - Выход, Готово, Пропустить, Закончить и т.п. Такая кнопка потребуется любой вашей форме.

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

Охотник за головами

Вайс Александр
1. Фронтир
Фантастика:
боевая фантастика
космическая фантастика
5.00
рейтинг книги
Охотник за головами

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

Винокуров Юрий
23. Кодекс Охотника
Фантастика:
боевая фантастика
попаданцы
5.00
рейтинг книги
Кодекс Охотника. Книга XXIII

Раб и солдат

Greko
1. Штык и кинжал
Фантастика:
попаданцы
альтернативная история
5.00
рейтинг книги
Раб и солдат

Без Чести

Щукин Иван
4. Жизни Архимага
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Без Чести

Убивать чтобы жить 3

Бор Жорж
3. УЧЖ
Фантастика:
героическая фантастика
боевая фантастика
рпг
5.00
рейтинг книги
Убивать чтобы жить 3

На границе империй. Том 4

INDIGO
4. Фортуна дама переменчивая
Фантастика:
космическая фантастика
6.00
рейтинг книги
На границе империй. Том 4

Бестужев. Служба Государевой Безопасности. Книга вторая

Измайлов Сергей
2. Граф Бестужев
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Бестужев. Служба Государевой Безопасности. Книга вторая

Строгий Режим

Тесленок Кирилл Геннадьевич
3. Гарем вне закона
Фантастика:
фэнтези
юмористическая фантастика
5.45
рейтинг книги
Строгий Режим

Чехов. Книга 2

Гоблин (MeXXanik)
2. Адвокат Чехов
Фантастика:
фэнтези
альтернативная история
аниме
5.00
рейтинг книги
Чехов. Книга 2

Доктора вызывали? или Трудовые будни попаданки

Марей Соня
Фантастика:
юмористическая фантастика
попаданцы
5.00
рейтинг книги
Доктора вызывали? или Трудовые будни попаданки

Боги, пиво и дурак. Том 3

Горина Юлия Николаевна
3. Боги, пиво и дурак
Фантастика:
фэнтези
попаданцы
5.00
рейтинг книги
Боги, пиво и дурак. Том 3

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

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

Дайте поспать!

Матисов Павел
1. Вечный Сон
Фантастика:
юмористическое фэнтези
постапокалипсис
рпг
5.00
рейтинг книги
Дайте поспать!

Мятежник

Прокофьев Роман Юрьевич
4. Стеллар
Фантастика:
боевая фантастика
7.39
рейтинг книги
Мятежник