Заглавная страница Избранные статьи Случайная статья Познавательные статьи Новые добавления Обратная связь КАТЕГОРИИ: АрхеологияБиология Генетика География Информатика История Логика Маркетинг Математика Менеджмент Механика Педагогика Религия Социология Технологии Физика Философия Финансы Химия Экология ТОП 10 на сайте Приготовление дезинфицирующих растворов различной концентрацииТехника нижней прямой подачи мяча. Франко-прусская война (причины и последствия) Организация работы процедурного кабинета Смысловое и механическое запоминание, их место и роль в усвоении знаний Коммуникативные барьеры и пути их преодоления Обработка изделий медицинского назначения многократного применения Образцы текста публицистического стиля Четыре типа изменения баланса Задачи с ответами для Всероссийской олимпиады по праву Мы поможем в написании ваших работ! ЗНАЕТЕ ЛИ ВЫ?
Влияние общества на человека
Приготовление дезинфицирующих растворов различной концентрации Практические работы по географии для 6 класса Организация работы процедурного кабинета Изменения в неживой природе осенью Уборка процедурного кабинета Сольфеджио. Все правила по сольфеджио Балочные системы. Определение реакций опор и моментов защемления |
Создание диалоговой формы « мастер путешествий »
Откроем новый рабочий лист Excel. Перейдем в редактор Visual Basic (Alt+F11) и выберем в меню «Вставка» команду UserForm. В свойствах формы изменим имя формы(Name)и заголовок (Caption) на TripWizard. В нижней левой части формы разместим четыре кнопки (CommandButton). Изменим их заголовки на Назад, Вперед, Отмена и
Готово, а имена—на cmdPrevious, cmdNext,cmdCancel, cmdFinish соответственно.
Примечание.
Вы уже, наверно, обратили внимание, что при создании форм или элементов управления, VBA устанавливает их имена (свойство Name) по умолчанию. Но часто возникает необходимость в их смысловом переименовании (как сейчас, например). Для переименования объектов и переменных в среде Windows существует соглашение об именах. Его суть: имя начинается с короткого префикса, одинакового для всех объектов одного и того же рода (табл. 5.1). За ним следует собственно имя — идентификатор объекта. Будем в дальнейшем придерживаться этого соглашения при работе с элементами управления.
Таблица 5.1 — Примеры префиксов имен объектов
Поместим на форму четыре элемента управления Рамки (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):
Дело в том, что не обеспечена возможность перехода от рамки к рамке и не заданы начальные значения в списках (инициализация формы). Ну, и нажатие кнопок пока не обработано.
Введем переменную 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 с.) |