Найти в Дзене

Экранные формы и элементы управления.

Всем привет, меня зовут Андрей! В данной статье мне бы хотелось рассказать про элементы управления и пользовательские формы. Что же такое пользовательская форма? Ее еще также иногда называют экранной формой. Эта форма представляет собой прямоугольник, содержащий различные элементы управления. Экранные формы, в основном, создаются для упрощения редактирования и ввода информации. Любой человек, работающий с операционной системой Windows, постоянно сталкивается с экранными формами. Приведем небольшой пример: Если мы сначала скопировали несколько ячеек Excel, а потом нам необходимо их вставить в другой диапазон с использованием определенных параметров, мы после выполнения команды «Копировать» выполним команду «Специальная вставка...». И вот какие варианты действий нам предлагают при выполнении этой команды специальной вставки: Что мы здесь видим? сам прямоугольник, содержащий перечень возможных действий – это и есть экранная форма. А все то, что внутри этой формы, это и есть элементы уп

Всем привет, меня зовут Андрей!

В данной статье мне бы хотелось рассказать про элементы управления и пользовательские формы.

Что же такое пользовательская форма? Ее еще также иногда называют экранной формой. Эта форма представляет собой прямоугольник, содержащий различные элементы управления. Экранные формы, в основном, создаются для упрощения редактирования и ввода информации. Любой человек, работающий с операционной системой Windows, постоянно сталкивается с экранными формами. Приведем небольшой пример:

Если мы сначала скопировали несколько ячеек Excel, а потом нам необходимо их вставить в другой диапазон с использованием определенных параметров, мы после выполнения команды «Копировать» выполним команду «Специальная вставка...». И вот какие варианты действий нам предлагают при выполнении этой команды специальной вставки:

Рис. 1. Экранная форма и элементы управления.
Рис. 1. Экранная форма и элементы управления.

Что мы здесь видим? сам прямоугольник, содержащий перечень возможных действий – это и есть экранная форма. А все то, что внутри этой формы, это и есть элементы управления. Информация «Специальная вставка» в самом верху этой формы – это есть заголовок этой формы; команды «пропускать пустые ячейки» и транспортировать» - это элементы управления, которые называются «Флажки»; «Вставить связь», «ОК» и «Отмена» - это командные кнопки. «Вставить» и «Операция» - это элементы управления Надпись, а все остальные элементы управления на данной экранной форме – это переключатели. Главное отличие флажка от переключателя в том, что флажков можно выделить несколько или не выделять ни одного вообще, а переключатель должен быть выбран только один в пределах каждой из групп.

Одна из самых интересных особенностей Excel – в том, что любой пользователь может сам создавать и экранные формы, и элементы управления. Делается это просто, в редакторе Visual Basic. Достаточно выполнить команду: Insert→UserForm. В переводе это и будет означать: Вставка → Пользовательская форма.

Вот что получится:

Рис.2. В редакторе VBA.
Рис.2. В редакторе VBA.

Что мы здесь видим? Во-первых, недавно созданная пользовательская форма, ее заголовок UserForm1 (в редакторе Visual Basic все экранные формы покрыты мелкими точками, эти точки – что-то типа ориентира, чтобы было удобнее добавлять в форму элементы управления).

Во-вторых, под этой пользовательской формой – Toolbox, или панель инструментов, или те элементы управления, которые можно вставить в нашу экранную форму. Мы видим, что в форму можно ввести не менее 15-ти различных элементов управления. Левая верхняя стрелочка – левее буквы А – предназначена для управления элементами управления, например для добавления таких элементов управления, которых нет «по умолчанию». Кстати, все элементы управления, «по умолчанию» включенные в список, и изображены на нашей панели управления. При желании можно что-то добавить или что-то убрать.

Приведем один пример – создадим небольшую экранную форму:

Рис. 3. Пример экранной формы.
Рис. 3. Пример экранной формы.

Как мы видим, данная экранная форма представляет собой рисунок, состоящий из разных элементов управления.

Выключатель отличается от командной кнопки. Выключатель может принимать два положения – нажатое и отжатое. Под выключателем – простая командная кнопка. Обычные простые кнопки – это кнопки типа «ОК» или «Отмена».

Небольшой комментарий к нашей форме. Обычно многостраничные формы – это те, при которых каждая страница имеет большой объем, ее формат почти совпадает с форматом всей экранной формы. Но, как мы видим, в каждом правиле есть исключения. Можно внедрить многостраничные элементы управления как небольшие части экранной формы.

Пока наша форма не функциональная, так как как к элементам управления не привязан ни один из макросов, или программных кодов. Если их добавить, то действия с элементами управления приведут к определенным вычислениям или другим действиям на самом листе Excel, в котором и находится данная форма.

Приведем небольшой пример.

Пусть у нас есть форма:

Рис. 4. Первая страница двустраничной формы.
Рис. 4. Первая страница двустраничной формы.

Как мы видим, здесь – двухстраничная экранная форма, на данном рисунке – только первая страница. Квадратные уравнения имеют вид

Квадратное уравнение.
Квадратное уравнение.

Первая страница нашей исходной формы предполагает именно ввод этих коэффициентов a, b и c.

Вторая страница – о решении квадратных уравнений:

Рис. 5. Вторая страница двухстраничной формы.
Рис. 5. Вторая страница двухстраничной формы.

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

А прежде, чем создать процедуры, нужно присвоить имена основным элементам управления. Точнее, не присвоить, а только изменить – ведь «по умолчанию» какие-то имена элементам управления присваиваются автоматически. А мы должны изменить эти имена так, чтобы сделать их более удобными.

Прежде всего присвоим имя нашей экранной форме, и это имя будет frm1.

Теперь создадим один макрос. Назовем его ПоказатьФорму1.

В этом макросе нужна всего одна строчка:

Sub ПоказатьФорму1()
frm1.Show
End Sub

Первую и последнюю строки мы не считаем – эти строки стандартны для любого макроса. Первая строка содержит имя макроса и его начало, последняя – окончание макроса. А основная суть этого макроса, изложенная в средней строке, достаточно проста – показать экранную форму, которой присвоено имя frm1.

Итак, в нашей экранной форме нам понадобятся следующие имена элементов управления:

На первой странице (Исходные данные):

- текстовое поле для ввода коэффициента a: txtA;

- текстовое поле для ввода коэффициента b: txtB;

- текстовое поле для ввода коэффициента c: txtC;

- кнопка «Вычислить» - cmbV.

На второй странице (Ответы):

- текстовое поле для дискриминанта: txtD;

- текстовое поле для корня из дискриминанта: txtKD;

- текстовое поле для икс-1: txtX1;

- текстовое поле для икс-2: txtX2;

- кнопка «Записать в Excel» - cmbzap;

- кнопка «Очистить» - cmboch.

Мы неспроста сказали, что текстовые поля во второй странице – не для ввода. Если коэффициенты в первой странице нашей экранной формы надо именно вводить, то этого нельзя сказать о тех данных, что будут рассчитаны для данных на второй странице нашей экранной формы. Чтобы исключить ввод данных с клавиатуры в текстовое поле, необходимо в настройках свойство «Locked» (то есть: запертый, блокированный) изменить «False» (ложно) на «True» (истинно):

Рис. 6. Фрагмент свойств элемента управления.
Рис. 6. Фрагмент свойств элемента управления.

Как видим, на рисунке некоторые свойства объекта txtD – текстового поля для дискриминанта.

После того, как нужные нам названия основных элементов управления заданы, остается добавить процедуры для расчета, то есть вычислить все необходимые значения.

Процедура для кнопки «Вычислить»:

Private Sub cmbV_Click()
Dim d As Double
d = Val(txtB.Value) * Val(txtB.Value) - 4 * Val(txtA.Value) * Val(txtC.Value)
txtD.Text = d
If d < 0 Then
txtKD.Text = "Дискриминант меньше нуля"
txtX1.Text = "-"
txtX2.Text = "-"
Else
txtKD.Text = Sqr(d)
txtX1.Text = (-Val(txtB.Value) + Sqr(d)) / 2 * Val(txtA.Value)
txtX2.Text = (-Val(txtB.Value) - Sqr(d)) / 2 * Val(txtA.Value)
End If
End Sub

Как мы видим, процедуры очень похожи на макросы. В первой строке процедуры- можно увидеть «cmbV_Click()». Здесь cmbV – это имя нашей кнопки, а Click означает, что данная процедура будет выполняться при нажатии этой кнопки, так как Click – это и есть нажатие. В принципе, уже этой процедуры достаточно, чтобы решать квадратные уравнения. Другие процедуры нам понадобятся для очистки полей, расположенных во второй странице нашей двухстраничной формы, а также для записи этих результатов на лист Excel.

Процедура для кнопки «Очистить»:

Private Sub cmboch_Click()
txtD.Value = Empty
txtKD.Value = Empty
txtX1.Value = Empty
txtX2.Value = Empty
End Sub

«Empty» - это значит очистить.

С кнопкой «Записать в Excel» все чуть сложнее. Если мы не хотим запоминать предыдущие значения (результаты решения других уравнений) – то будет одна процедура, если не хотим – то другая (в этом случае каждый последующий результат будет записан поверх предыдущего).

Итак, процедура для записи по первому варианту (предыдущие результаты стираются:

Private Sub cmbzap_Click()
If Val(txtD.Value) > 0 Then
a1 = Val(txtD.Value)
a2 = Val(txtKD.Value)
a3 = Val(txtX1.Value)
a4 = Val(txtX2.Value)
Range("A1").Select
ActiveCell.Value = a1
Range("A2").Select
ActiveCell.Value = a2
Range("A3").Select
ActiveCell.Value = a3
Range("A4").Select
ActiveCell.Value = a4
Else
a1 = Val(txtD.Value)
a2 = txtKD.Value
a3 = txtX1.Value
a4 = txtX2.Value
Range("A1").Select
ActiveCell.Value = a1
Range("A2").Select
ActiveCell.Value = a2
Range("A3").Select
ActiveCell.Value = a3
Range("A4").Select
ActiveCell.Value = a4
End If
End Sub

Оператор (Val) в данном случае преобразовывает текст в число. Главный недостаток такого преобразования – при нецелых числах преобразуется только целая часть, дробная игнорируется. Но для переноса любой другой информации – будь то дата, текст или целые числа – весь перенос данных происходит без изменений. Кстати, при решении квадратных уравнений часто бывает так, что все корни – целые числа. Мы показали данный пример не столько для тех, кто хочет решать квадратные уравнения, сколько для тех, кто хочет улучшить свои навыки владения электронной таблицей Excel.

Если нужно сохранять предыдущие данные, то в самом начале этой процедуры нужно добавить несколько строк:

Columns("A:A").Select
Selection.Insert Shift:=xlToRight, CopyOrigin:=xlFormatFromLeftOrAbove
Range("B1").Select

Тогда процедура вначале будет создавать новый столбец A, а всю предыдущую информацию подвигать «вправо». И в любом случае, на листе Excel в первой строке будут записаны дискриминанты, во второй – их корни, в третьей – первый корень уравнения, в четвертой – второй. Все вычисления происходят согласно известным алгебраическим формулам.

На этом пока все. Мы будем очень рады видеть среди подписчиков канала всех любителей математики, Excel и судоку различных видов!