Создание форм и самые важные свойства и методы форм
Для чего нужны формы
Формы, элементы управления и события
С самыми простыми возможностями организации взаимодействия с пользователем (применение встроенных функций MsgBox() и InputBox()) мы уже познакомились. Однако, конечно же, возможностей этих функций не всегда хватает. В этой главе речь пойдет о том, как создать графический интерфейс своего приложения с помощью VBA.
Чаще всего для предоставления пользователю графического интерфейса используются формы VBA. В принципе, многие элементы управления можно вставлять непосредственно на страницу документа (для этого используются панели инструментов Формы и Элементы управления), однако классический способ — это применение формы. Вне зависимости от того, используется ли форма или элементы управления размещаются напрямую в документе, набор элементов управления и приемы работы с ними одинаковы.
Как выглядит применение форм в приложении VBA? Обычно форма запускается при открытии пользователем документа. Пользователь выполняет на форме какие-то действия по вводу или выбору информации (например, выбирает значения в раскрывающемся списке, устанавливает значения для флажков и переключателей и т. п.), а потом, как правило, нажимает на кнопку на этой форме, и введенная им информация передается в базу данных, отправляется по электронной почте, записывается в файл для распечатки и т. д.
Создать форму очень просто: для этого достаточно в редакторе Visual Basic щелкнуть правой кнопкой мыши на проекте (т. е. на имени документа) в окне Project Explorer и в контекстном меню выбрать Insert | UserForm. Откроется окно дизайнера форм (Form designer), в котором будет представлено пустое серое окно формы (по умолчанию она называется UserForm1) и рядом Toolbox — панель с набором элементов управления.
Если у вас включен показ окна свойств Properties (он включается по клавише <F4>), то в этом окне будут представлены свойства формы. Переход к редактору кода для этой формы (по умолчанию открывается событие Click) выполняется по клавише <F7>, возврат обратно в окно дизайнера форм — по <Shift>+<F7>.
Очень удобно, что для форм и элементов управления можно настраивать свойства при помощи графического интерфейса окна свойств — резко уменьшается количество программного кода, которое нужно писать вручную.
Некоторые самые важные свойства форм (кроме ShowModal все они применимы и для других элементов управления) приведены далее.
q Name — это свойство определяет имя формы. Пользователь вашей программы, скорее всего, его никогда не увидит. Имя формы используется только программистом в коде для этой формы (и в окнах редактора Visual Basic). После создания формы ее имя, предлагаемое по умолчанию (UserForm1), рекомендуется заменить на что-нибудь более значимое, чтобы было проще ориентироваться в программе (это относится ко всем элементам управления).
q Caption — определяет заголовок формы (по умолчанию совпадает с именем формы). Рекомендуется ввести строку, которая будет напоминать пользователю о назначении формы (например, "Выбор типа отчета").
q Enabled — если это свойство установлено в False, пользователь не сможет работать с формой. Используется для временного отключения формы, например, пока пользователь не обеспечит какие-то условия для ее работы.
q ShowModal — если свойство установлено в True (по умолчанию), то пользователь не может перейти к другим формам или вернуться в документ, пока не закроет эту форму (так называемый "модальный" режим работы).
Большая часть других свойств относится к внешнему виду, размерам и местонахождению формы.
Самые важные методы форм перечислены в следующем списке.
q В процессе редактирования формы (из окна редактора Visual Basic) ее можно запускать по нажатию клавиши <F5>. После того, как форма будет готова, вы должны обеспечить ее запуск в документе. Для запуска формы нужно воспользоваться методом Show():
UserForm1.Show
Если форма уже была загружена в память, она просто станет видимой, если нет — то будет автоматически загружена (произойдет событие Load).
Сам этот метод можно вызвать, например:
· из обычного макроса, привязанного к кнопке или клавиатурной комбинации;
· из автозапускаемого макроса (макроса с названием AutoExec для Word);
· из кода для элемента управления, расположенного в самом документе (например, CommandButton) или на другой форме (для перехода между формами);
· поместить его в обработчик события Open для документа Word или книги Excel, чтобы форма открывалась автоматически при открытии документа.
q После того, как пользователь введет или выберет нужные данные на форме и нажмет требуемую кнопку, форму необходимо убрать. Для этого можно воспользоваться двумя способами:
· спрятать форму (использовать метод Hide()), например:
UserForm1.Hide
Форма будет убрана с экрана, но останется в памяти. Потом при помощи метода Show() можно будет опять ее вызвать в том же состоянии, в каком она была на момент "прятанья", а можно, например, пока она спрятана, программно изменять ее и расположенные на ней элементы управления. Окончательно форма удалится из памяти при закрытии документа;
· если форма больше точно не потребуется, можно ее удалить из памяти при помощи команды Unload:
Unload UserForm1
Остальные методы относятся либо к обмену данными через буфер обмена (Copy(), Cut(), Paste()), либо к служебным возможностям формы (PrintForm(), Repaint(), Scroll()).
Важнейшая концепция VBA — события. Событие (event) — это то, что происходит с программой и может быть ею распознано. Например, к событиям относятся щелчки мышью, нажатия на клавиши, открытие и закрытие форм, перемещение формы по экрану и т. п. VBA построен таким образом, чтобы можно было создавать на нем программы, управляемые событиями (event-driven). Такие программы противопоставляются устаревшему процедурному программированию.
Самые важные события форм приведены далее.
q Initialize — происходит при подготовке формы к открытию (появлению перед пользователем). Обычно в обработчик для этого события помещается код, связанный с открытием соединений с базой данных, настройкой элементов управления на форме, присвоением значений по умолчанию и т. п.
q Click (выбирается по умолчанию) и DblClick — реакция на одиночный и двойной щелчок мыши соответственно. Для формы эти события используются не так часто. Обычно обработчики щелчков применяются для кнопок (элементов управления CommandButton).
q Error — это событие используется при возникновении ошибки в форме, предоставляя пользователю возможность исправить сделанную им ошибку.
q Terminate — используется при нормальном завершении работы формы и выгрузке ее из памяти (например, по команде Unload). Обычно применяется для разрыва открытых соединений с базой данных, освобождения ресурсов, протоколирования и т. п. Если работа формы завершается аварийно (например, запустившее форму приложение выдало команду End), то это событие не возникает.
Остальные события связаны либо с изменением размера окна формы, либо с нажатиями клавиш, либо с активизацией (получением фокуса) или деактивизацией (потерей фокуса).
Поскольку форма — это во многом просто контейнер для хранения других элементов управления, главное ее событие — Initialize. Все остальные события обычно используются не для формы, а для расположенных на ней элементов управления.
Нужно отметить некоторые моменты, связанные с созданием и редактированием форм:
q формы, создаваемые в Microsoft Access, не являются стандартными, как формы остальных приложений Office, и набор свойств и методов у них несколько отличается. Тем не менее, по функциональности они практически одинаковы;
q иногда для обсуждения форму удобно распечатать. Для этого предусмотрено специальное диалоговое окно, которое можно вызвать по нажатию клавиш <Ctrl>+<P> (при выбранной форме в дизайнере);
q если все нужные вам элементы управления трудно уместить на одной форме (даже большого размера), в вашем распоряжении два варианта: воспользоваться двумя формами (осуществляя переходя между ними при помощи методов Show() и Hide(), подвязанных к элементам управления) или воспользоваться несколькими вкладками для формы. Для этой цели в вашем распоряжении — специальный элемент управления Multipage.