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

Рис. 2.12. Верхняя часть электронной анкеты
На рис. 2.12 в правой части расположено три элемента управления: текстовое окно и группа из двух переключателей. Мы уже рассматривали пример, связанный с функционированием переключателей. Этот элемент управления позволяет обеспечить два состояния: «включено» и «выключено». Идея использования двух подобных элементов на нашем листе достаточно простая. А именно, человек, который заполняет бланк, указывает (щелчком на одном из переключателей) один из двух вариантов:
В случае выбора варианта Другой город следует указать, какой именно. Это производится в соседнем текстовом окне справа. Понятно, что рассматривается ситуация, когда большинство людей, заполняющих бланк, проживает в Нижнем Новгороде. Зададим значения свойства Name элементов на рис. 2.12 следующим образом:
В начальном варианте (при открытии книги) по умолчанию установлен вариант Н. Новгород (это выполняется в окне свойств, где следует установить 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. Нижняя часть электронной анкеты
Переключатели Студент (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 установлены следующим образом:
В результате мы обеспечили автоматическую установку начальных значений при открытии книги. Действие переключателей Студент и Специалист мы уже прокомментировали, и теперь приведем программные процедуры обработки щелчков мышью на них (листинг 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.15). Здесь для данных по каждому анкетируемому отводится по одной строке. И по щелчку на кнопке Записать на 2-й лист (см. рис. 2.14) информация анкеты переписывается в очередную свободную строку второго листа. В листинге 2.20 приводится текст данной процедуры. Как вы уже заметили, из названия процедуры следует, что для свойства Name кнопки установлено значение WriteList.

Рис. 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 |
Теперь все процедуры готовы, и можно поработать с созданной электронной анкетой. Понятно, что данная разработка не включает многие детали, которые в каждой практической ситуации накладывают свои требования. Однако в этой статье и не ставилась цель создать что-то универсальное. Гораздо важнее на рассмотренных примерах получить навыки, необходимые для выполнения самостоятельных разработок.
Управление Excel из других офисных программ пакета Microsoft Office
Как отправлять электронные сообщения Microsoft Outlook прямо из вашего листа таблицы Excel с помощью VBA
Очень простой пример управления Word из Excel с помощью VBA
О. А. Сдвижков — Непараметрическая статистика в MS Excel и VBA
С. Роман — Использование макросов в Excel
Как обеспечить вывод значений выпадающего списка с двоеточием, как в бухгалтерских программах?
Как при помощи инструментов Excel решить задачу о коробке максимального объема
Построение графика функции одной переменной средствами Excel
Как правильно вводить, редактировать и копировать формулы в таблицах Excel
Как в Excel обойтись без подстановки шрифтов при применении малых кеглей