Создание диалоговой формы « мастер путешествий » 


Мы поможем в написании ваших работ!



ЗНАЕТЕ ЛИ ВЫ?

Создание диалоговой формы « мастер путешествий »



 

Откроем новый рабочий лист Excel. Перейдем в редактор Visual Basic (Alt+F11) и выберем в меню «Вставка» команду UserForm. В свойствах формы изменим имя формы(Name)и заголовок (Caption) на TripWizard.

В нижней левой части формы разместим четыре кнопки (CommandButton). Изменим их заголовки на Назад, Вперед, Отмена и

 

Готово, а имена—на cmdPrevious, cmdNext,cmdCancel, cmdFinish соответственно.

 

Примечание.

 

Вы уже, наверно, обратили внимание, что при создании форм или элементов управления, VBA устанавливает их имена (свойство Name) по умолчанию. Но часто возникает необходимость в их смысловом переименовании (как сейчас, например). Для переименования объектов и переменных в среде Windows существует соглашение об именах.

Его суть: имя начинается с короткого префикса, одинакового для всех объектов одного и того же рода (табл. 5.1). За ним следует собственно имя — идентификатор объекта. Будем в дальнейшем придерживаться этого соглашения при работе с элементами управления.

 

Таблица 5.1 — Примеры префиксов имен объектов

 

Имя Управляющий элемент Префикс
CheckBox Флажок chk
ComboBox Поле со списком cbo
CommandButton Кнопка cmd
Frame Рамка fra
Image Изображение img
Label Надпись lbl
ListBox Список lst
MultiPage Набор страниц mlt
OptionButton Переключатель opt
RefEdit Редактирование ссылок ref
ScrollBar Полоса прокрутки scr
SpinButton Счетчик spn
TextBox Текстовое поле txt
ToggleButton Выключатель tgl
UserForm Форма ftm

 

 

Поместим на форму четыре элемента управления Рамки (Frame) (Рисунок 5.10). Пронумеруем рамки, задав заголовки 1, 2, 3, 4 в свойстве Caption. Свойству SpecialEffect установим значение 2-fmSpecialEffectSunken (верхняя и левая границы объекта затенены, а правая и нижняя подсвечены; элемент углублен в окружающее окно).

 

 

 

Рисунок 5.10 — Форма TripWizard с размещенными

 

на ней элементами управления

 

Разместим в рамках элементы управления. На первой рамке поместим Label и ComboBox (Рисунок 5.10). Дадим полю со списком имя cboTransport.

 

На второй рамке разместим Label и три элемента управления OptionButton друг под другом (Рисунок 5.10). Дадим имена optAfrica, optAsia, optEuropa соответственно.

 

На третьей рамке разместим элементы Label и TextBox (Рисунок 5.10). Дадим текстовому полю имя txtNamet.

 

На четвертой рамке разместим элемент Label и два элемента управления CheckBox (Рисунок 5.10). Дадим флажкам имена chkHotel и chkMeals соответственно.

Наложим по очереди все рамки точно друг на друга.

 

Примечание.

 

Если после этого понадобится перейти к нужной рамке (например, для внесения изменений), то необходимо сначала выбрать ее в списке объектов окна свойств формы TripWizard, а затем щелкнуть на контуре рамки правой кнопкой и в появившемся контекстном меню выбрать команду Переместить (Bring Forward).

 

Справа поместим кнопку с картинкой и назначим ей по клику мышкой переход на сайт отзывов http://www.otzyv.ru Для этого в процедуру обработки щелчка по кнопке надо поместить следующий код:

 

Private Sub CommandButton1_Click()

ActiveWorkbook.FollowHyperlink Address:="http://www.otzyv.ru",

_ NewWindow:=True

End Sub

 

Рисунок 5.11 — Окончательный вид формы TripWizard

 

Итак, форма с необходимыми объектами готова (Рисунок 5.11). Создадим в редакторе модуль и поместим туда макрос запуска формы StartWizard:

 

 

Public Sub StartWizard()

With TripWizard

 

Show

End With

End Sub

 

С помощью элементов управления создадим на листе Excel кнопку Путешествие и назначим кнопке созданный макрос. Но отображение рамок не произошло, кнопки тоже не работают (Рисунок 5.12):

 

 
Рисунок 5.12 — Неудачный запуск формы TripWizard

 

 


Дело в том, что не обеспечена возможность перехода от рамки к рамке и не заданы начальные значения в списках (инициализация формы). Ну, и нажатие кнопок пока не обработано.

 

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

Щелкнем два раза по свободному месту на форме TripWizard,тем самым попадем в окно редактирования кода формы.

 

Сначала объявим переменные и константы, общие для всех макросов:

 

Dim CurrentPanel As Integer      'Это счетчик рамок

 

Const FirstPanel = 1

Const LastPanel = 4

 

Затем создадим макрос ShowPanel и поместим в него следующий код:

 

Public Sub ShowPanel()

'Сначала делаем все рамки невидимыми frame1.Visible = False frame2.Visible = False frame3.Visible = False frame4.Visible = False

 

'Выбор рамки в зависимости от значения счетчика

Select Case CurrentPanel

Case 1

frame1.Visible = True 'если 1, то рамка 1 видима

 

Case 2

frame2.Visible = True 'если 2, то рамка 2 видима

 

Case 3

frame3.Visible = True 'если 3, то рамка 3 видима

 

Case 4

frame4.Visible = True 'если 4, то рамка 4 видима

 

Case Else

End Select 'Окончание выбора'Даем название заголовку формы

 

Me.Caption = "TripWizard: Step " & CurrentPanel & " of " & LastPanel End Sub

 

Проинициализируем начальные значения мастера при его вызове. Для этого в коде формы создадим процедуру отклика на событие диалогового окна Initialize и поместим в тело процедуры следующий код:

 

Private Sub UserForm_Initialize()

'Задаем начальное значение счетчика

 

CurrentPanel = 1

'Запускаем процедуру показа первой рамки

ShowPanel

'Введем список для ComboBox, находящегося в этой рамке

With cboTransport

.AddItem " Самолет "

 

.AddItem " Поезд "

.AddItem " Корабль "

End With

End Sub

Создадим процедуры отклика на щелчок для кнопок Отмена, Назад, Вперед и Готово.

 

Два раза щелкнем по кнопке Готово, тем самым мы создадим процедуру отклика кнопки на щелчок по ней. Запишем в появившемся окне редактирования кода следующее:

 

Private Sub cmdFinish_Click()

Me.Hide

 

Me.Tag = vbOK

End Sub

 

Затем, не выходя из окна редактирования кода, создадим еще 3 процедуры отклика.

 

Процедура отклика кнопки Отмена:

 

Private Sub cmdCancel_Click()

Me.Tag = vbCancel

End

End Sub

 

Процедура отклика кнопки Назад:

 

 

Private Sub cmdPrevious_Click()

'Движение к предыдущей рамке

CurrentPanel = CurrentPanel - 1

 

ShowPanel

cmdNext.Enabled = True

If CurrentPanel = FirstPanel Then

cmdPrevious.Enabled = False

Else

cmdPrevious.Enabled = True

End If

End Sub

 

Процедура отклика кнопки Вперед:

 

 

Private Sub cmdNext_Click()

'Движение к следующей рамке

CurrentPanel = CurrentPanel + 1

ShowPanel

cmdPrevious.Enabled = True

If CurrentPanel = LastPanel Then

cmdNext.Enabled = False

 

Else

cmdNext.Enabled = True

End If

End Sub

 

Для того чтобы на первом шаге кнопка Назад была не активна (ниже первого шага нам двигаться некуда), нужно для этой кнопки в свойстве Enabled поставить значение False.

 

Теперь, запустив макрос StartWizard, увидим, как происходит переход от одного состояния формы к другой. В каждом состоянии обеспечивается прием от пользователя определенной информации. Но в итоге не формируется никакого отчетного документа.

 

Чтобы это исправить, внесем изменения в макрос StartWizard:

Public Sub StartWizard()

Dim msg As String

With TripWizard

Show

'Последовательно обрабатываем щелчки мыши, 'выбирая данные с элементов управления и 'формируя информационную строку msg

msg = " Имя: " &.txtName.Text & Chr(13)

msg = msg & " Континент: "

If.optAfrica.Value Then

 

msg = msg & " Африка " & Chr(13)

Else

If.optAsia.Value Then

msg = msg & " Азия " & Chr(13)

Else

If.optEuropa.Value Then

msg = msg & " Европа " & Chr(13)

End If

End If

End If

msg = msg & " Оплата включает: "

If.chkHotel.Value Then

msg = msg & " Гостиница "

End If

If.chkMeals.Value Then

msg = msg & " Питание "

 

End If

msg = msg & Chr(13)

msg = msg & " Транспорт: " &.cboTransport.Value

 

MsgBox msg,, " Приятного отдыха!"

End

End With

End Sub

 

Теперь можно протестировать работу созданного «Мастера путешествий» — от нажатия на кнопку «Путешествие» до нажатия на кнопку «Готово».

 

Появится результирующий отчет, составленный по данным, полученным на всех шагах «Мастера путешествий» (Рисунок 5.13).

 

 

Рисунок 5.13 — Результирующий отчет

 


Задание 5.5. Создание формы туристического ваучера

 

Измените макрос таким образом, чтобы в результате работы «Мастера» формировался ваучер на туристическую поездку, где были бы указаны следующие данные: ФИО путешественника, страна и город посещения, название отеля, срок пребывания, тип номера, вид питания, стоимость тура. Выразите сожаление, если клиент вышел, ничего не заполнив.

 

Для формирования многостраничности использовать элемент управления MultiPage.

 

 



Поделиться:


Последнее изменение этой страницы: 2020-11-11; просмотров: 467; Нарушение авторского права страницы; Мы поможем в написании вашей работы!

infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 3.141.152.173 (0.048 с.)