Глава 7. Элементы управления и пользовательская форма
Глава 7. Элементы управления и пользовательская форма
Элементы управления
VBA обладает встроенным набором элементов управления. Используя этот набор и редактор форм не трудно создать любой пользовательский интерфейс, который будет удовлетворять всем требованиям, предъявляемым к интерфейсу в среде Windows. В данной главе дан обзор встроенных элементов управления VBA. Элементы управления являются объектами. Поэтому, как любые объекты, они обладают свойствами, методами и событиями. Элементы управления создаются при помощи панели инструментов Элементы управления (Control Toolbox) (рис. 7.1). На этой панели представлены кнопки, позволяющие конструировать элементы управления, а также кнопки вызова окна свойств, перехода в режим конструктора и редактор кода.
Рис. 7.1. Панель инструментов Элементы управления
Создание элементов управления на рабочем листе или в форме как правило происходит на начальном этапе конструирования приложения. Иногда используется программное их создание в процессе работы приложения. Но этот подход применяется реже.
Большинство элементов управления можно располагать как на рабочем листе, так и в форме. Но существуют такие элементы управления, как RefEdit, Набор страниц и Набор вкладок, которые можно располагать только в форме. В табл. 7.1 приведен список основных элементов управления и соответствующих кнопок панели инструментов Элементы управления (Control Toolbox).
Таблица 7.1. Панель инструментов Элементы управления
Элемент управления
Имя
Кнопка для создания элемента
Поле Надпись
TextBox Label
Кнопка
CommandButton
Список
ListBox
Поле со списком
ComboBox
Полоса прокрутки
ScrollBar
Счетчик
SpinButton
Переключатель
OptionButton
Флажок
CheckBox
Выключатель
ToggleButton
Рамка
Frame
Рисунок
Image
RefEdit
RefEdit
Набор страниц
MultiPage
Набор вкладок
TabStrip
Для размещения элемента управления на листе или в форме нажмите соответствующую кнопку панели инструментов Элементы управления (Control Toolbox) и с помощью мыши перетащите рамку элемента управления в нужное место. После этого элемент управления можно перемещать, изменять его размеры, копировать в буфер обмена и вставлять из буфера обмена.
Режим конструктора
Для удобства работы с элементами управления в период их конструирования в Excel введен режим конструктора, который активизируется нажатием кнопки
Режим конструктора (Design Mode) панели инструментов Элементыуправления (Control Toolbox). В режиме конструктора отключена реакция элемента управления на события. Поэтому при включенном режиме конструктора можно видоизменять элемент управления и задавать его свойства. На рис. 7.2 показано создание элемента управления CommandButton (кнопка) на рабочем листе. После того как пользователь решит, что созданный элемент управления имеет тот вид, который ему нужен, и все требуемые свойства элемента управления установлены, он должен отключить режим конструктора повторным нажатием кнопки Режим конструктора (Design Mode).
Рис. 7.2. Создание элемента управления CommandButton на рабочем листе в режиме конструктора
Установка свойств элемента управления
Для установки свойств элемента управления вручную при его конструировании необходимо выделить элемент управления и нажать кнопку Свойства (Properties) панели инструментов Элементы управления (Control
ТоoolBох). На экране отобразится диалоговое окно Свойства (Properties) (рис. 7.3). Оно аналогично окну Свойства (Properties) редактора Visual Basic. Вручную при помощи этого окна обычно устанавливается свойство Caption, возвращающее отображаемый текст элемента управления. На рис. 7.3 значение свойства Caption элемента управление CommandButton изменено с установленного ПО умолчанию (CommandButtonl) на текст Нажми меня. Кроме
того, внесены изменения в параметры свойства Font, устанавливающее шрифт выводимого на поверхности кнопки текста, а именно, увеличен размер шрифта с 8 до 12, шрифт MS sans serif заменен на courier New и изменено начертание букв с обычного на полужирное. Также свойство shadow установлено равным True, вместо False, как это имеет место по умолчанию. Свойство shadow устанавливает, отображается ли элемент управления с тенью или без нее.
Рис. 7.3. Диалоговое окно Свойства и элемент управления CommandButton с измененными свойствами Caption, Font и Shadow
Редактор кода
После установки свойств элемента управления или формы переходят к написанию кода, связанного с ними. Особое место в этом коде занимают процедуры обработки событий. У каждого элемента управления есть целый набор событий, обрабатывающих те или иные действия. Приведем некоторые из них:
Click
Щелчок
DblClick
Двойной щелчок
GotFocus
Кнопка в фокусе
LostFocus
С кнопки снят фокус
Код обработки события записывается на листе модуля. Для активизации модуля в том месте, где надо ввести код по обработке события, связанного с выделенным элементом управления, или отредактировать уже написанный код достаточно нажать кнопку Исходный текст (View Code) панели инструментов Элементы управления (Control Toolbox).
Нажатие на кнопку Исходный текст (View Code) активизирует модуль с именем лист1, т. е. модуль, относящийся к рабочему листу, на котором создана кнопка (рис. 7.4). Вся рабочая книга, а также каждый рабочий лист, диаграмма или форма имеют связанные с ними модули кода. Кроме того, можно создать модули кода для макросов и модули класса.
Рис. 7.4. Модуль кода и окно Проект
В левой верхней части модуля кода находится раскрывающийся список с именами объектов, для которых в данном модуле создаются процедуры обработки событий. В этом списке также представлен раздел модуля Общая часть (General), где описываются переменные и константы уровня модуля.
В правой верхней части модуля кода находится раскрывающийся список с именами событий, связанных с данным объектом.
Составим процедуру обработки события click так, чтобы нажатие на кнопку отображало на экране диалоговое окно, уведомляющее пользователя о случившемся действии (нажатии кнопки) (рис. 7.5).
Private Sub CoimiandButtonl_Click ()
MsgBox "Ты нажал на меня"
End Sub
Рис. 7.5. Диалоговое окно, отображаемое на экране при нажатии кнопки Нажми меня
Пользовательская форма UserForm
Пользовательская форма UserForm предоставляет пользователю возможность создавать диалоговые окна разрабатываемых приложений. Она служит базой пользовательского диалогового окна, на которой в зависимости от решаемой задачи размещают требуемые элементы управления.
Семейство userForms является семейством, компоненты которого представляют все загруженные формы UserForm в приложении. Как и все семейства, UserForms имеет свойства count (возвращает число компонентов в семействе) и item (возвращает определенный компонент семейства), а также метод Add (добавляет к семейству новый компонент).
Приведем основные свойства, методы и события пользовательской формы. Наиболее часто используемые свойства объекта UserForm.
Name
Возвращает имя пользовательской формы
Caption
Возвращает текст, отображаемый в строке заголовка формы
BackColor
Возвращает цвет фона формы
BorderStyle
Устанавливает тип границы
Picture
Указывает рисунок, отображаемый как фон формы
Left И Top
Возвращают местоположение верхнего левого угла формы в пунктах
Height И Width
Возвращают высоту и ширину формы в пунктах
StartUpPosition
Возвращает значение, определяющее положение формы при ее первом отображении на экране.
Допустимые значения:
Manual (начальное значение не устанавливается),
CenterOwner (выравнивание по центру объекта, к которому принадлежит форма)
CenterScreen (выравнивание по центру экрана)
windows Default (положение верхнего левого угла экрана)
Наиболее часто используемые методы объекта UserForm.
Show
Отображает форму на экране
Hide
Закрывает форму
Move
Изменяет положение и размер формы
PrintForm
Печатает изображение формы
Семейство Controls
Доступ к семейству всех элементов управления, расположенных в пользовательской форме UserForm, осуществляется с помощью семейства controls. Например, чтобы скрыть все элементы управления формы UserForm, можно использовать код, в котором свойству visible элемента управления, определяющему, отображается ли этот элемент на экране или нет, устанавливается значение False:
For Each Элемент in UserForml.Controls
Элемент.Visible = False Next Control
Создание пользовательской формы
Обсудим процесс создания пользовательской формы на примере конструирования простейшего диалогового окна.
Шаг 1
Выберите команду Сервис, Макрос, Редактор Visual Basic (Tools, Macro, Visual Basic) для того, чтобы перейти в редактор Visual Basic.
Шаг 2
Выберите команду Вставить User Form (Insert UserForm). В редакторе Visual Basic появятся:
Окно с пользовательской формой
Панель инструментов Панель элементов (Toolbox) (рис. 7.6).
Рис. 7.6. Окно редактора Visual Basic с пользовательской формой и панелью элементов
ШагЗ
Используя диалоговое окно Свойства (Properties), отображаемое нажатием кнопки и Панель элементов (Toolbox), создайте из пользовательской формы диалоговое окно, показанное на рис. 7.7. Это окно состоит из трех кнопок и одного поля. Свойство Caption пользовательской формы определите равным Песнь о воробушке и бабочке, а кнопок — равными Первый акт, Второй акт и Третий акт.
Шаг 4
Для того чтобы написать процедуру обработки события нажатия кнопки Первый акт, дважды щелкните ее. Активизируется модуль
UserForml, в который введите Процедуру:
Private Sub CommandButtonl Click ()
TextBoxl .Text = "Воробышек за бабочкой прыг -прыг -прыг"
End Sub
для Обработки событий Нажатий кнопок
Второй акт и Третий акт в модуле UserForml введите следующие две процедуры:
Private Sub CommandButton2 Click () TextBoxl .Text = "Воробышек за бабочкой скок-скок-скок"
End Sub
Private Sub CommandButton3 Click () TextBoxl . Text = "Воробышек бабочку ням-ням-ням"
End Sub
Шаг 5
Процесс создания диалогового окна и процедур, связанных с ним, завершен. Для того чтобы проверить, как работает созданная программа, нажмите кнопку Запуск подпрограммы/UserForm (Run). На экране на фоне рабочего листа отобразится диалоговое окно песнь о воробушке и бабочке. Для проверки функционирования кнопок нажмите, например, кнопку первый акт. В поле выведется сообщение Воробышек за бабочкой прыг-прыг-прыг (рис. 7.8). Для закрытия диалогового окна песнь о воробушке и бабочке нажмите системную кнопку, расположенную в верхней правой части строки заголовка диалогового окна.
Рис. 7.7. Редактор Visual Basic с преобразованной пользовательской формой для создаваемого приложения
Рис. 7.8. Диалоговое окно Песнь о воробушке и бабочке
Общие свойства элементов управления
Приведем основные общие свойства элементов управления.
Name
Имя элемента управления
Caption
Надпись, отображаемая при элементе управления
AutoSize
Допустимые значения: True (устанавливает режим автоматического изменения размеров элемента управления так, чтобы на нем полностью помещался текст, присвоенный свойству Caption) и False (в противном случае)
Visible
Допустимые значения: True (элемент управления отображается во время выполнения программы) и False (в противном случае)
Enabled
Допустимые значения: True (пользователь вручную может управлять элементом управления) и False (в противном случае)
Height И Width
Устанавливают геометрические размеры объекта (высоту и ширину)
Left И Top
Устанавливают координаты верхнего левого угла элемента управления, определяющие его местоположение в форме
ControlTipText
Устанавливает текст в окне всплывающей подсказки, связанной с элементом управления. В следующем примере элементу управления CommandButtonl назначен текст всплывающей подсказки Это кнопка :
CommandButtonl . ControlTipText = "Это кнопка"
BackColor, ForeColor и BorderColor
Устанавливают цвет заднего и переднего плана элемента управления, также его границы
BackStyle
Устанавливает тип заднего фона
BorderStyle
Устанавливает тип границы. Допустимые значения:
fmBorderStyieSingle (граница в виде контура)
fmBorderStyieNone (граница невидима)
SpecialEf feet
Устанавливает тип границы. Отличается от свойства BorderStyle тем, что позволяет установить несколько типов, но одного цвета. BorderStyle позволяет установить только один тип, но различных цветов
Picture (создание картинки)
Внедряет картинку на элемент управления. Например, на поверхности кнопки картинка отображается с помощью следующей инструкции:
Функция LoadPicture (ПолноеИмяФайла) считывает графическое изображение. Аргумент ПолноеИмяФайла указывает полное имя графического файла
Picture (удаление картинки)
После того как картинка создана на элементе управления, иногда возникает необходимость ее удалить. Это легко достигается присвоением свойству Picture значения LoadPicture ("")
Tag
Используется для хранения дополнительной информации о форме или элементе управления, которая может быть в последующем востребована в программе. В следующем примере в пользовательской форме расположены три кнопки и одно поле. Свойство Tag каждого из этих элементов управления, за исключением второй кнопки , установлено равным Показать. свойство Tag второй кнопки установлено равным спрятать. В цикле проверяется свойство Tag всех элементов управления и при инициализации диалогового окна отображаются только те элементы управления, у которых это свойство равно Показать . Private Sub UserForm Initialize)) Dim Элемент As Object CommandButtonl .Tag = "Показать"
ControlTipText
Устанавливает текст в окне всплывающей подсказки, связанной с элементом управления. В следующем примере элементу управления CommandButton1 назначен текст всплывающей подсказки это кнопка :
CommandButton1 .ControlTipText = "Это кнопка"
BackColor, ForeColor и BorderColor
Устанавливают цвет заднего и переднего плана элемента управления, также его границы
BackStyle
Устанавливает тип заднего фона
BorderStyle
Устанавливает тип границы. Допустимые значения:
fmBorderStyleSingle (граница в виде контура)
fmBorderstyieNone (граница невидима)
SpecialEf feet
Устанавливает тип границы. Отличается, от свойства BorderStyle тем, что позволяет установить несколько типов, но одного цвета. BorderStyle позволяет установить только один тип, но различных цветов
Picture
(создание картинки)
Внедряет картинку на элемент управления. Например, на поверхности кнопки картинка отображается с помощью следующей инструкции:
CommandButtoni . Picture = LoadPicture ( "с : my docKpyr . bmp" ) Функция LoadPicture (ПолноеИмяФайла) считывает графическое изображение. Аргумент ПолноеИмяФайла указывает полное имя графического файла
Picture
(удаление картинки)
После того как картинка создана на элементе управления, иногда возникает необходимость ее удалить. Это легко достигается присвоением свойству picture значения LoadPicture ("")
Tag
Используется для хранения дополнительной информации о форме или элементе управления, которая может быть в последующем востребована в программе. В следующем примере в пользовательской форме расположены три кнопки и одно поле. Свойство Tag каждого из этих элементов управления, за исключением второй кнопки, установлено равным Показать. Свойство Tag второй кнопки установлено равным спрятать. В цикле проверяется свойство Tag всех элементов управления и при инициализации диалогового окна отображаются только те элементы управления, у которых это свойство равно Показать .
Private Sub UserForm Initialize ()
Dim Элемент As Object CommandButton1 . Tag = "Показать"
CommandButton2 .Tag = "Спрятать"
CommandButton3 .Tag = "Показать"
TextBoxl.Tag = "Показать"
For Each Элемент In Controls
If Элемент . Tag = "Показать" Then Элемент. Visible = True
Else Элемент .Visible = False
End If Next Элемент End Sub
Цвета, устанавливаемые свойствами BackColor, ForeColor и BorderColor, задаются шестнадцатеричными числами. Если эти свойства устанавливать не при помощи окна Свойства (Properties), а программно, вместо этих шестна-дцатеричных чисел удобнее использовать соответствующие постоянные, задающие цвета (табл. 7.2).