Microsoft Excel

трюкиприёмырешения

Как создается электронная анкета средствами VBA Excel

Разберем решение еще одной практической ситуации — заполнение электронного бланка анкеты. Сам разрабатываемый лист будет достаточно насыщен элементами управления, поэтому здесь мы рассмотрим оформление листа последовательно.

Начнем разработку (рис. 2.12) с небольших деталей. Так, заполним три ячейки в столбце В поясняющей информацией, а для трех соответствующих ячеек в столбце С необходимо лишь подобрать соответствующее форматирование — заливку и размер шрифта. В дальнейшем в процессе работы с этим бланком пользователь будет вносить в ячейку С2 фамилию, в С4 — имя, а в С6 — отчество. Теперь, как и в предыдущих книгах, следует убрать сетку с рабочего листа.

Рис. 2.12. Верхняя часть электронной анкеты

Рис. 2.12. Верхняя часть электронной анкеты

На рис. 2.12 в правой части расположено три элемента управления: текстовое окно и группа из двух переключателей. Мы уже рассматривали пример, связанный с функционированием переключателей. Этот элемент управления позволяет обеспечить два состояния: «включено» и «выключено». Идея использования двух подобных элементов на нашем листе достаточно простая. А именно, человек, который заполняет бланк, указывает (щелчком на одном из переключателей) один из двух вариантов:

  • Н. Новгород;
  • Другой город.

В случае выбора варианта Другой город следует указать, какой именно. Это производится в соседнем текстовом окне справа. Понятно, что рассматривается ситуация, когда большинство людей, заполняющих бланк, проживает в Нижнем Новгороде. Зададим значения свойства Name элементов на рис. 2.12 следующим образом:

  • Opt1 (переключатель Н. Новгород);
  • 0pt2 (переключатель Другой город);
  • City (текстовое окно для ввода названия города).

В начальном варианте (при открытии книги) по умолчанию установлен вариант Н. Новгород (это выполняется в окне свойств, где следует установить True в качестве значения свойства Value). При этом текстовое окно для выбора города должно быть невидимым. Для этого в окне свойств для свойства Visible объекта City необходимо установить значение False.

При щелчке на переключателе Другой город текстовое окно City становится видимым, а при щелчке на переключателе с подписью Н. Новгород опять пропадает. Сами тексты процедур обработки щелчков на переключателях, обеспечивающих подобный эффект, приведены в листинге 2.17.

В дальнейшем мы обеспечим программную установку значений свойства Value переключателей и значения свойства Visible текстового окна City.

1
2
3
4
5
6
7
8
'Листинг 2.17. Процедуры обработки щелчков 
' на переключателях для выбора города
Private Sub Opt1_Click()
City.Visible = False
End Sub
Private Sub Opt2_Click()
City.Visible = True
End Sub

Подчеркнем один важный технический момент. Мы расположили два переключателя, которые связаны друг с другом. При щелчке на одном из них значение свойства Value другого автоматически становится False. Далее на нашем рабочем листе мы расположим еще одну группу переключателей, которая фиксирует категорию анкетируемого (учащийся или специалист). Для того чтобы группы переключателей правильно работали, необходимо подчеркнуть, какие из них к какой группе относятся. Для этого необходимо значения свойства GroupName для переключателей, связанных с городами, сделать одинаковыми (например, можно выбрать Op_city). Для других переключателей значение данного свойства должно быть другим.

Теперь можно выйти из режима конструктора и проверить работу написанных процедур. Убедившись, что все функционирует по плану, продолжим создание рассматриваемой разработки. На рис. 2.13 показана следующая группа элементов управления, которые нам необходимо добавить на том же рабочем листе. В левой части рис. 2.13 сосредоточены элементы, которые заполняются при условии, что анкетируемый является студентом. Соответственно, правая часть — для лиц, уже имеющих диплом об образовании. При этом названия Место учебы, Курс, Место работы и Примечание являются элементами управления типа «Надпись». Они введены для пояснения содержимого соседних (находящихся справа от них) текстовых окон. В связи с тем, что эти надписи программно в дальнейшем не используются, имена этих объектов мы не приводим.

Рис. 2.13. Нижняя часть электронной анкеты

Рис. 2.13. Нижняя часть электронной анкеты

Переключатели Студент (Name — St) и Специалист (Name — Sp) относятся к одной группе переключателей, отличной от группы переключателей, используемых для выбора городов. Теперь поясним, как они будут использоваться.

Так, при выборе категории Студент видимыми становятся текстовые окна для заполнения полей анкеты Место учебы (Name — Place) и Курс (Name — Kyrs), а текстовые окна для заполнения полей Место работы (Name — Work) и Примечание (Name — Prim) становятся невидимыми. Соответственно, при выборе категории Специалист все наоборот — видимыми становятся текстовые окна, которые должен заполнить специалист. В нижней части листа на рис. 2.13 располагаются три флажка — это простые элементы управления, в функциональном плане похожие на переключатели. Основное используемое свойство флажка — Value, которое принимает два возможных значения: False и True.

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

Как уже говорилось, при открытии книги по умолчанию необходимо сделать выбор на вариантах Н.Новгород и заполнении анкеты студентом. Это лучше реализовать в процедуре Workbook_Open (листинг. 2.18).

На панели элементов ActiveX (см. рис. 1.24) пиктограмма элемента управления «Флажок» третья слева.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
' Листинг 2.18. Процедура, выполняемая при открытии книги
PPrivate Sub Workbook_Open()
Worksheets(1).Opt1.Value = True
Worksheets(1).Opt2.Value = False
Worksheets(1).City.Visible = False
Worksheets(1).St.Value = True
Worksheets(1).Place.Visible = True
Worksheets(1).Place.Text = ""
Worksheets(1).Kyrs.Visible = True
' По умолчанию рассматривается студент первого курса
Worksheets(1).Kyrs.Text = "1 "
Worksheets(1).Work.Visible = False
Worksheets(1).Work.Text = ""
Worksheets(1).Prim.Visible = False
Worksheets(1).Prim.Text = ""
Worksheets(1).Engl.Value = False
Worksheets(1).Auto.Value = False
Worksheets(1).Info.Value = False
End Sub

Из текста листинга 2.18 видно, что для флажков значения свойства Name установлены следующим образом:

  • Eng1 — знание английского языка;
  • Auto — умение управлять автомобилем;
  • Info — навыки работы на компьютере.

В результате мы обеспечили автоматическую установку начальных значений при открытии книги. Действие переключателей Студент и Специалист мы уже прокомментировали, и теперь приведем программные процедуры обработки щелчков мышью на них (листинг 2.19).

1
2
3
4
5
6
7
8
9
10
11
12
13
14
' Листинг 2.19. Процедуры, выполняемые по щелчкам на переключателях Sp и St
Private Sub St_Click()
Place.Visible = True
Kyrs.Visible = True
Work.Visible = False
Prim.Visible = False
End Sub
 
Private Sub Sp_Click()
Place.Visible = False
Kyrs.Visible = False
Work.Visible = True
Prim.Visible = True
End Sub

Таким образом, мы обеспечили необходимый интерфейс ввода информации на первом рабочем листе книги. Заполненный вариант анкеты представлен на рис. 2.14.

Рис. 2.14. Заполненная форма анкеты

Рис. 2.14. Заполненная форма анкеты

Далее будем считать, что информацию с первого листа следует записать в базу данных — на второй лист (рис. 2.15). Здесь для данных по каждому анкетируемому отводится по одной строке. И по щелчку на кнопке Записать на 2-й лист (см. рис. 2.14) информация анкеты переписывается в очередную свободную строку второго листа. В листинге 2.20 приводится текст данной процедуры. Как вы уже заметили, из названия процедуры следует, что для свойства Name кнопки установлено значение WriteList.

Рис. 2.15. Представление информации на втором листе книги

Рис. 2.15. Представление информации на втором листе книги

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
' Листинг 2.20. Процедура, выполняемая при щелчке на кнопке Записать на 2-й лист
Private Sub WriteList_Click()
' Подсчет количества имеющихся записей на втором листе
N = 0
While Worksheets(2).Cells(N + 2, 1).Value <> ""
    N = N + 1
Wend
' Запись порядкового номера в первый столбец
Worksheets(2).Cells(N + 2, 1).Value = N + 1
' Копирование фамилии, имени отчества
Worksheets(2).Cells(N + 2, 2).Value = Range("C2")
Worksheets(2).Cells(N + 2, 3).Value = Range("C4")
Worksheets(2).Cells(N + 2, 4).Value = Range("C6")
' Название города располагается в пятом столбце на втором листе
If Opt1.Value = True Then
    Worksheets(2).Cells(N + 2, 5).Value = "H.Новгород"
Else
    Worksheets(2).Cells(N + 2, 5).Value = City.Text
End If
' Статус в шестом столбце, место работы или учебы в седьмом,
' примечание в восьмом столбце.
If St.Value = True Then
    Worksheets(2).Cells(N + 2, 6).Value = "студент"
    Worksheets(2).Cells(N + 2, 7).Value = Place.Text
    Worksheets(2).Cells(N + 2, 8).Value = Kyrs.Text
Else
    Worksheets(2).Cells(N + 2, 6).Value = "спец. с в/о"
    Worksheets(2).Cells(N + 2, 7).Value = Work.Text
    Worksheets(2).Cells(N + 2, 8).Value = prim.Text
End If
' Характеристики человека, зафиксированные во флагах
If Eng1.Value = True Then
    Worksheets(2).Cells(N + 2, 9).Value = "Да"
Else
    Worksheets(2).Cells(N + 2, 9).Value = "Нет"
End If
If Auto.Value = True Then
    Worksheets(2).Cells(N + 2, 10).Value = "Да"
Else
    Worksheets(2).Cells(N + 2, 10).Value = "Нет"
End If
If Info.Value = True Then
    Worksheets(2).Cells(N + 2, 11).Value = "Да"
Else
    Worksheets(2).Cells(N + 2, 11).Value = "Нет"
End If
End Sub

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


Top