Пользовательские формы
Вопросы:
Пользовательская форма UserForm
Объектно-ориентированное программирование позволяет создавать графический интерфейс разрабатываемых приложений на основе использования управляющих элементов. Элементы управления являются объектами. Поэтому, как любые объекты, они обладают свойствами, методами и могут откликаться на события. Элементы управления можно вставлять как в рабочие листы, так и в экранные формы. Экранные формы (их также называют пользовательскими формами, от англ. UserForm) — это окна (обычного вида либо диалоговые), являющиеся частью интерфейса приложения.
Работа с пользовательской формой состоит из нескольких этапов:
Открыть или создать файл для работы;
Перейти в редактор Visual Basic;
Создать пользовательскую форму;
Применить к созданной форме свойства;
Создать в форме элементы управления;
Написать процедуры обработки событий.
Панель элементов управления
Панель инструментов
При создании экранной формы автоматически отображается “Панель инструментов”. “Панель инструментов” содержит элементы управления, которые можно использовать в экранной форме. Если панель инструментов не появилась при создании экранной формы, то вызвать элементы управления можно, используя команду View | ToolBox или нажав на кнопку
.
“Панель инструментов” (или “Панель элементов управления”) предназначена для создания и редактирования объектов вашего приложения. При написании программ на VBA вы обязательно столкнетесь с английскими названиями элементов управления, поэтому в таблице даны русские и английские названия элементов управления.

ScrolBar (полоса прокрутки) как элемент управления — это не совсем то, чем вы привычно пользуетесь для прокрутки, например, рабочего листа. В данном случае полосы прокрутки применяются в качестве механизмов выбора. В графических программах вы, наверное, видели, как с помощью полос прокрутки можно выбрать цвет либо сделать изображение более светлым или более темным.
SpinButton (счетчик) — используется для ввода или изменения числовых значений.
OptionButton (переключатель) — позволяет выбрать один из нескольких взаимоисключающих параметров или действий. Переключатели обычно отображаются группами, обеспечивая возможность альтернативного выбора.
CheckBox (флажок) — предоставляет пользователю возможность выбора. Флажок обычно имеет два состояния: установленное и сброшенное.
Togglebutton (выключатель) — кнопка, которая остается нажатой после щелчка на ней, и возвращается в исходное состояние после повторного щелчка.
Frame (рамка) — используется для визуального объединения каких-либо элементов управления в группу, показывая, что эти элементы связаны между собой.
Image (рисунок) — позволяет вставлять графические элементы в экранные формы. С помощью этого элемента можно вставлять изображения из графических файлов следующих типов: bmp; cur; gif; ico; jpg; wmf.
MultiPage (набор страниц) — этот элемент управления внешне похож на набор вкладок и также содержит одну или несколько страниц. Отличие между ними заключается в том, что страницы являются формами, содержащими собственные элементы управления (включая наборы вкладок), которые можно отформатировать всеми средствами форматирования экранных форм.
TabStrip (набор вкладок) — элемент управления, который содержит одну или несколько вкладок. Используется для организации в группы связанной информации.
RefEdit (поле со свертыванием) — этот элемент похож на обычное поле ввода, но имеет кнопку с правой стороны поля, которая сворачивает экранную форму, что позволяет легко выбрать любой диапазон ячеек на рабочем листе.
Для нашей работы мы будем использовать не все элементы управления. Наиболее часто используемыми являются:
Label (надпись);
TextBox (поле);
CommandButton (кнопка управления);
Image (рисунок);
OptionButton (переключатель);
CheckBox (флажок).
Создание пользовательской формы
Для создания пользовательской формы надо выполнить следующие действия:
1. Открыть новый файл или любой файл, в котором вы уже работали.
2. Выполнить команду меню Сервис | Макрос | Редактор Visual Basic. Откроется окно редактора Visual Basic.
3. Щелкнуть на кнопке Insert UserForm панели инструментов окна редактора Visual Basic или выполнить команду Insert | UserForm (Вставка | Экранная форма). Появится новая экранная форма.

Созданная экранная форма имеет по умолчанию строку с заголовком UserForm1. Сетка на макете формы помогает размещению элементов управления, при отображении формы в приложении сетка не видна.
После создания формы необходимо просмотреть свойства этого объекта и изменить установки, если это требуется по условию задачи. Для отображения окна свойств надо выбрать команду View | Properties Window (Вид | Окно свойств) или щелкнуть по одноименной кнопке на панели инструментов
.
Наиболее часто используемые свойства объекта UserForm

Наиболее часто используемые методы объекта UserForm

Используя панель элементов управления, из незаполненной формы можно сконструировать любое требуемое диалоговое окно. Размещение элементов управления в форме производится следующей последовательностью действий:
Нажать значок того элемента, который вы хотите размеcтить в форме.
Поместить указатель мыши на то место, где будет располагаться элемент управления.
Нажать левую кнопку мыши и, не отпуская ее, растянуть появившийся прямоугольник до нужных размеров.
Отпустить кнопку мыши, элемент создан.
В экранной форме можно также перемещать или изменять размеры элементов управления. Кроме того, можно изменить размеры и самой экранной формы, перетащив ее маркеры изменения размеров.
После успешного завершения разработки экранной формы можно просмотреть в действии полученный результат с помощью команды “Run | Run Sub/UserForm” (“Выполнить | Выполнить процедуру/экранную форму”) или нажать клавишу
. Форма отобразится поверх текущей рабочей книги. Щелчок на кнопке “Закрыть” (находится в верхнем правом углу формы) закроет экранную форму и возвратит вас в редактор Visual Basic.
Разрабатываемое на языке приложение называется проектом. Проект включает в себя не только форму с размещенными на ней управляющими элементами, но и программные модули обработки событий, которые описывают поведение объектов приложения и взаимодействие объектов между собой.
Практическая работа № 1 “Функции VBA”
Создадим простое приложение — “Функции VBA”. На первом занятии мы познакомились с рядом функций. Отработаем некоторые из них. Создадим пользовательскую форму, разместим в ней элементы управления Label (надпись), CommandButton (кнопка управления). При нажатии на кнопку“Запуск” будет генерироваться случайное число. Это число должно отображаться в элементе Label (надпись). Затем вычислим корень квадратный из этого числа, его синус и косинус, а результаты выведем в другие элементы управления Label (надпись). Кроме этого, в форме выведем текущую дату. По нажатию на кнопку “Выход” форма скрывается с экрана. Для запуска формы на листе Excel необходимо создать кнопку с надписью “Функции VBA”.
Приступим к разработке и реализации приложения.
Порядок работы:
1. Запустите Excel.
2. Загрузите VBA (Сервис | Макрос | Редактор Visual Basic).
3. Проверьте, чтобы на экране появилось окно проекта и окно свойств. Выполните команду Вставить форму или Insert | UserForm. Форму можно увеличить стандартным способом, ухватившись за правый нижний угол и растягивая ее.
4. Сделайте появившуюся форму активной и установите значения свойств данного объекта:

5. Теперь добавьте в форму средства управления. Нам при разработке потребуется всего два инструмента: Label (надпись)
и CommandButton (кнопка управления)
с панели элементов. Форма с элементами управления в режиме конструктора примет следующий вид:

6. Для вывода результатов расчета подготовим элементы Label1, Label2, Label3, Label4:
Установите значения свойств объекта Label1 – Label4:

7. Для пояснительных надписей подготовим элементы Label5, Label6, Label7, Label8.
Установите значения свойств объекта Label5 – Label8:

8. Для вывода текущей даты подготовим элемент управления Label9.
Установите значения свойств объекта Label9:

9. Добавим в форме командную кнопку для запуска программы, применив элемент управления CommandButton1.
Установите значения свойств объекта CommandButton1:

10. Добавьте в форме командную кнопку для закрытия формы, применив элемент управления CommandButton2.
Установите значения свойств объекта CommandButton2:

11. После выполнения всех пунктов форма в режиме конструктора будет выглядеть так:

Перейдем к написанию текста программы.
12. Перед написанием программы проверим работоспособность нашей формы. Для вывода формы на экран выполним команду Run | Run Sub/UserForm или нажмем клавишу
. На фоне листа Excel появится созданная нами форма, но при нажатии на кнопку “Запуск” или “Выход” ничего не произойдет, т.к. мы не запрограммировали отклик на событие (нажатие кнопки). Закроем форму и перейдем в редактор VBA.
13. В форме дважды щелкните на кнопке “Запуск”, чтобы вывести заготовку программы, связанную с командной кнопкой.

Программа начинается с заголовка Private Sub (локальная процедура) и заканчивается предложением End Sub (конец процедуры). Между этими предложениями записывается текст программы.
14. Появится заготовка программы. Напишем текст программы, а затем разберем каждую строку.

Вспомним синтаксис установки значения свойства объекту:
Объект.Свойство = ЗначениеСвойства.
У нас каждая строка программы содержит название объекта, его свойство (левая часть строки, до равенства) и установку значения свойства (правая часть строки, после знака равенства).
Label — объект.
Caption — свойство.
Date — значение свойства (текущая дата).
Rnd * 90 — значение свойства. Функция генерации случайных чисел Rnd генерирует случайное число между 0 и 1. Это функция, которую мы часто будем применять в работе.
Функция Int возвращает целую часть аргумента (в данном случае — произведение случайного числа на 90) и отбрасывает дробную часть аргумента. Результат — числа от 1 до 90.
Sqr(Label1.Caption). Так как случайное число сохранилось в объекте Label1, мы применяем функцию Sqr, аргументом которой является объект, в котором хранится случайное число.
Sin(Label1.Caption * 3.14159 / 180) — аргумент функции синус рассматривается в радианах, но для того, чтобы было привычнее анализировать полученные результаты, применим формулу для преобразования градусов в радианы, т.е. преобразуем случайное число (градусы) в радианы и получим результат.
Текст программы

Выведите форму на экран, нажав клавишу
, и проверьте работоспособность кнопки “Запуск”. Результат выполнения программы показан на рисунке.

15. Теперь запрограммируем кнопку “Выход”. Перейдем в редактор VBA и дважды щелкнем по кнопке “Выход” в форме. Появится заготовка программы. Вставим одну строку программы UserForm1.Hide.
В этой строке:
UserForm1 — это объект.
Hide — это метод.
Текст программы

Кроме запуска программы по нажатию клавиши
, существует еще один способ вывода формы на экран. Для этого:
1. Перейдите в приложение Excel на любой лист.
2. На панели элементов управления выберите инструмент CommandButton и нарисуйте кнопку на листе Excel.
3. Вызовите свойства этого элемента, нажав на панели элементов управления кнопку “Свойства”
.
4. Установите значения свойств объекта CommandButton1.
5. Запрограммируйте кнопку “Функции VBA”. Для этого вызовите заготовку программы, нажав на панели элементов управления кнопку “Исходный текст”
, не забыв перед этим выделить кнопку “CommandButton1”.
6. Вставьте одну строку программы — UserForm1.Show, что означает показать форму UserForm1 на экране.
В этой строке:
§ UserForm1 — объект.
§ Show — метод.
7. Затем перейдите на лист приложения Excel и отключите режим конструктора на панели элементов управления
.
8. Запустите программу.
9. Сохраните свою работу.
Практическая работа №2 “Вычисления”
Задание: спроектировать форму для вычисления умножения, сложения, вычитания и деления двух чисел, заданных датчиком случайных чисел.
Порядок работы:
1. Запустите Excel.
2. Загрузите VBA (Сервис | Макрос | Редактор Visual Basic).
3. Проверьте, чтобы на экране появилось окно проекта и окно свойств.
4. Выполните команду Вставить форму или Insert | UserForm, назовите форму “Вычисления” и вызовите панель “Toolbox”.
5. Спроектируйте в форме 4 командные кнопки “CommandButton” и пять надписей “Label”.
Значения свойств объектов установите самостоятельно.
У вас получится:
6. В форме дважды щелкните на кнопке “Х”, чтобы вывести заготовку программы.
Программа начинается с заголовка Private Sub и заканчивается предложением End Sub (конец процедуры). Между этими предложениями запишем текст программы:
7. Аналогично для кнопок “+”, “–”, “:” и “Выход” программа будет следующая:
8. Проверьте работоспособность формы с помощью команды “Run | Run Sub/UserForm” (“Выполнить | Выполнить процедуру/экранную форму”). Также можно выполнить проверку с помощью кнопки
в меню или нажав на клавишу
.
9. На листе Excel создайте кнопку вызова формы и назовите ее “Вычисления”, переименуйте Лист1 в лист “Вычисления”.
10. Вызовите “Панель Элементов управления” и нарисуйте с ее помощью кнопку.
11. Выделив кнопку, вызовите через правую кнопку мыши “Свойства” и отформатируйте выделенную кнопку.
12. Выделите кнопку “Вычисления”, нажмите на панели элементов управления кнопку “Исходный текст”
.
13. Запишите программу вызова формы: UserForm1.Show.
14. Сохраните свою работу.
Литература
Газета "Информатика" Издательского дома "Первое сентября" № 4 2006 г.