У некоторых событий есть параметры, с которыми информация о его происшествии передается программе. Так, процедура обработки события KeyDown (то есть нажатия какой-либо клавиши тогда, когда активен данный элемент) имеет вид
Private Sub CornmandButtonl_KeyDown (ByVal KeyCode As MSForms. Returnlnteger, ByVal Shift As Integer)
End Sub
Переменная KeyCode будет после срабатывания данной процедуры будет иметь значение, равное коду нажатой клавиши, а переменная Shift — 1, если соответствующая клавиша была нажата, и 0, если нет. Эти переменные можно использовать в процедуре.
Все свойства, задаваемые в Окне свойств, можно изменять и из программы. Например, команда TextBoxl.Enabled=True даст возможность пользователю ввести текст в поле ввода TextBoxl, а команда CheckBoxl.Value=False уберет отметку из флажка с именем CheckBoxl. Эта возможность делает формы VBA динамическими — то есть содержимое форм может меняться немедленно в ответ на действия пользователя без выгрузки и повторной загрузки формы.
Форма может работать как обычное диалоговое окно программы для Windows, — например, выбор пользователем значения из списка может каждый раз выводить в какой-нибудь из допускающих такой вывод элементов формы определенный текст, разный для разных выбранных значений.
Наиболее часто возможность создания динамических форм используется для инактивации элементов, не могущих быть использованными при каких-либо условиях. К примеру, в форме, состоящей из поля ввода текста и кнопки, вызывающей процедуру вычисления квадратного корня, кнопка может становиться неактивной и не реагирующей на нажатия, если число, введенное в поле ввода, отрицательное.
Для просмотра формы в режиме выполнения (то есть так, как она будет выглядеть в готовой программе) надо нажать клавишу F5 — ту же, что и для запуска на выполнение обычной программы. Все средства отладки, описанные выше, работают и при отладке форм.
Стоит иметь в виду, что после выгрузки формы (методом Unload Me) все переменные, описанные в программе реакции формы на события, обнуляются. Поэтому после выгрузки формы получить от нее какие-либо данные уже нельзя. Если в результате работы формы в основную программу должны передаваться какие-либо данные, то тогда нужно в основной программе объявить несколько переменных с помощью инструкции Public (т. е. сделать их доступными для чтения и изменения из любого другого модуля), а затем в программе реакции формы на события записать в них всю необходимую информацию, полученную от пользователя, и использовать значения этих переменных в основной программе.
Программа реакции формы на события представляет собой полноценный модуль проекта за одним исключением: процедуры из него могут быть вызваны только из другой программы. Вызов формы на исполнение с помощью кнопки, строки меню или сочетания клавиш невозможен. Поэтому для вызова формы необходимо в основной программе (если все необходимые функции реализованы в процедурах программы реакции формы на события, то основную программу все равно необходимо создать, хотя бы только для вызова этой формы) надо указать команду ИмяФормы. Show, а кнопки и сочетания клавиш назначать именно этой основной программе.
Формы, так же как и модули, могут быть сохранены в отдельных файлах путем экспортирования функцией "Экспорт файла" своего контекстного меню правой кнопки мыши в Менеджере проектов или путем перетаскивания ее названия из Meнеджера проектов в Explorer. Но, в отличие от модулей, при сохранении форм получается два файла, в одном из которых содержится текст программы реакции формы на события, а в другом — информация о расположении элементов на форме, их свойствах, а также рисунки и фон формы. Поэтому при импортировании формы необходимо, чтобы оба этих файла были в одной папке.
Если необходимо повторить ту или иную группу операций несколько раз, то используются операторы цикла:
Do…Loop, For…Next, For Each…Next и While… Wend.
Если необходимо совершить те или иные действия в зависимости от наличия или отсутствия выполнения какого-либо условия или в зависимости от значения той или иной переменной, используются операторы условия: If… Then… Else и Select Case.
Если необходимо совершить переход к другой части той же программы, то используется оператор GoTo "имя метки". Там, куда должен быть совершен переход, на отдельной строке должна стоять метка с соответствующим именем, а после нее — двоеточие.
Подробное описание функций, особенностей и синтаксиса всех этих операторов можно получить в справочной системе редактора VBA, поэтому не стоит здесь на них останавливаться. Просто наберите интересующий вас оператор в окне Редактора VBA, установите на него курсор и нажмите кнопку F1. В русской версии Office 97 справка по этим операторам переведена на русский язык.
* * *
Полезный совет