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 выполняет их автоматически при наступлении определенного события. Но поскольку в остальном процедура обработки события ничем не отличается от обычной процедуры, вы можете вызывать ее из программного кода как обычную. Просто выделив имя процедуры в отдельный оператор, например:

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

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

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

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

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

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

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

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

Перейти на страницу:

Все книги серии Для чайников

Похожие книги