Информатика практическая. Практическая работа_UserForm. Пользовательская форма
Скачать 100 Kb.
|
Практическая работа № Тема «Пользовательская форма» Цель урока Создать форму, позволяющую делать следующие операции: Последовательное заполнение плоской базы данных Программирование примечаний Программирование текстовых полей на рабочем листе Использование переключателя и флажков Создание пользовательского заголовка окна приложения Как на рабочем листе программно закрепить область Методические указания Для заполнения базы данных на рабочем листе с помощью редактора пользовательских форм создадим диалоговое окно Регистрация туристов фирмы "Эх, прокачу!" (рис.1). Рис.1. Диалоговое окно Регистрация туристов фирмы "Эх, прокачу!" Рис.2.База данных о туристах на рабочем листеи пояснительное текстовое поле, появляющееся при выборе переключателя «О программе» При инициализации диалогового окна программа проверяет, есть ли заголовки у полей создаваемой базы данных о регистрации туристов. Если этих заголовков нет, то программа автоматически создает их, снабжая примечаниями, имеющими пояснительный текст о содержании полей Выбор переключателя о программе приведет к отображению на экране текстового поля с пояснениями к данной программе. Снятие этого флажка удаляет данное поле (2).
Private Sub CommandButton1_Click() Dim Фамилия As String * 20 Dim Имя As String * 20 Dim Пол As String * 3 Dim ВыбранныйТур As String * 20 Dim Оплачено As String * 3 Dim Фото As String * 3 Dim Паспорт As String * 3 Dim Срок As String * 3 Dim НомерСтроки As Integer ' ' НомерСтроки - номер первой пустой строки рабочего листа ' НомерСтроки = Application.CountA(ActiveSheet.Columns(1)) + 1 ' ' Считывание информации из диалогового окна в переменные ' With UserForm1 Фамилия = .TextBox1.Text Имя = .TextBox2.Text Срок = .TextBox3.Text If .OptionButton1.Value = True Then Пол = "Муж" Else Пол = "Жен" End If If .CheckBox1.Value = True Then Оплачено = "Да" Else Оплачено = "Нет" End If If .CheckBox2.Value = True Then Фото = "Да" Else Фото = "Нет" End If If .CheckBox3.Value = True Then Паспорт = "Да" Else Паспорт = "Нет" End If ВыбранныйТур = .ComboBox1.List(.ComboBox1.ListIndex, 0) End With With ActiveSheet .Cells(НомерСтроки, 1).Value = Фамилия .Cells(НомерСтроки, 2).Value = Имя .Cells(НомерСтроки, 3).Value = Пол .Cells(НомерСтроки, 4).Value = ВыбранныйТур .Cells(НомерСтроки, 5).Value = Оплачено .Cells(НомерСтроки, 6).Value = Фото .Cells(НомерСтроки, 7).Value = Паспорт .Cells(НомерСтроки, 8).Value = Срок End With End Sub Private Sub CommandButton2_Click() UserForm1.Hide Application.Caption = Empty ActiveSheet.DrawingObjects.Delete End Sub Private Sub SpinButton1_Change() ' Процедура ввода значения счетчика в поле ввода With UserForm1 .TextBox3.Text = CStr(.SpinButton1.Value) End With End Sub Private Sub TextBox3_Change() With UserForm1 .SpinButton1.Value = CInt(.TextBox3.Text) End With End Sub Private Sub ToggleButton1_Click() If ToggleButton1.Value = True Then ActiveSheet.DrawingObjects.Delete ActiveSheet.Shapes.AddTextbox(msoTextOrientationHorizontal, 11.25, 44.25, 106.5, 96#).Select Selection.Characters.Text = "" With Selection.Font .Name = "Arial Cyr" .FontStyle = "обычный" .Size = 10 .Strikethrough = False .Superscript = False .Subscript = False .OutlineFont = False .Shadow = False .Underline = xlUnderlineStyleNone .ColorIndex = xlAutomatic End With Selection.ShapeRange.Fill.ForeColor.SchemeColor = 13 Selection.ShapeRange.Fill.Visible = msoTrue Selection.ShapeRange.Fill.Solid Selection.Characters.Text = _ "Программа составлена " & Chr(10) & _ "!!!!!!!!!!!!!! для регистрации " & Chr(10) & _ "клиентов" & Chr(10) & "туристической " & Chr(10) & "фирмы" With Selection.Characters(Start:=1, Length:=86).Font .Name = "Arial Cyr" .FontStyle = "обычный" .Size = 10 .Strikethrough = False .Superscript = False .Subscript = False .OutlineFont = False .Shadow = False .Underline = xlUnderlineStyleNone .ColorIndex = xlAutomatic End With End If If ToggleButton1.Value = False Then ActiveSheet.DrawingObjects.Delete End If End Sub Private Sub UserForm_Initialize() ' Процедура вызова диалогового окна ' и задание элементов раскрывающегося списка ' ЗаголовокРабочегоЛиста ' ' Задание пользовательского заголовка окна приложения Application.Caption = "Регистрация. База данных туристов" ' ' Закрытие строки формул окна Excel Application.DisplayFormulaBar = False ' ' Задание элементов раскрывающегося списка ' With CommandButton1 .Default = True .ControlTipText = "Ввод данных в базу данных" End With With CommandButton2 .Cancel = True .ControlTipText = "Кнопка отмены" End With With ToggleButton1 .Value = False .ControlTipText = "Информация о программе" End With With ComboBox1 .List = Array("Лондон", "Париж", "Берлин") .ListIndex = -1 End With 'UserForm1.Show End Sub Sub ЗаголовокРабочегоЛиста() ' ' Процедура создания заголовков полей базы данных ' ' Если заголовки существуют, то досрочный выход из процедуры ' If Range("a1").Value = "Фамилия" Then Range("a2").Select Exit Sub End If ' Если заголовки не существуют, то создаются заголовки полей ' Range("A1").Value = "Фамилия" Range("b1").Value = "Имя" Range("c1").Value = "Пол" Range("d1").Value = "Выбранный Тур" Range("e1").Value = "Оплачено" Range("f1").Value = "Фото" Range("g1").Value = "Паспорт" Range("h1").Value = "Срок" Range("A:A").ColumnWidth = 12 Range("D:D").ColumnWidth = 14.4 Range("2:2").Select ActiveWindow.FreezePanes = True Range("a2").Select Range("A1").AddComment Range("A1").Comment.Visible = False Range("A1").Comment.Text Text:="фамилия клиента" Range("b1").AddComment Range("b1").Comment.Visible = False Range("b1").Comment.Text Text:="имя клиента" Range("c1").AddComment Range("c1").Comment.Visible = False Range("c1").Comment.Text Text:="пол клиента" Range("d1").AddComment Range("d1").Comment.Visible = False Range("d1").Comment.Text Text:="направление тура" Range("e1").AddComment Range("e1").Comment.Visible = False Range("e1").Comment.Text Text:="путевка оплачена да/нет" Range("f1").AddComment Range("f1").Comment.Visible = False Range("f1").Comment.Text Text:="фотографии сданы да/нет" Range("g1").AddComment Range("g1").Comment.Visible = False Range("g1").Comment.Text Text:="наличие паспорта да/нет" Range("h1").AddComment Range("h1").Comment.Visible = False Range("h1").Comment.Text Text:="Продлжительность поездки" End Sub В данной программе для определения первой пустой строки в заполняемой базе данных о туристах используется инструкция НомерСтроки = Application.CountA(ActiveSheet.Columns(1)) + 1, правая часть которой вычисляет число непустых ячеек в первом столбце активного рабочего листа. Переменной НомерСтроки присваивается значение на единицу большее, чем число непустых строк, что естественно, т. к. ей должен быть присвоен номер первой непустой строки базы данных. При ее написании процедуры «ЗаголовокрабочегоЛиста» лучше всего воспользоваться MacroRecorder, который переведет производимые действия по созданию примечаний пользователем вручную на язык VBA. Примерный вид макроса Sub Макрос1() ' ' Макрос1 Макрос ' Range("2:2").Select ActiveWindow.FreezePanes = True Range("Al").AddComment Range("A1"}.Comment.Visible = False Range ("Al"). Comment.Text Тех^="Фамилия клиента" Range("Bl").AddComment Range("Bl").Comment.Visible = False Range("Bl").Comment.Text Text:="Имя клиента" Range("Cl").AddComment Range("Cl").Comment.Visible = False Range("Cl").Comment.Text Text:="Пол клиента" Range("Dl").AddComment Range("Dl").Comment.Visible = False Range("Dl").Comment.Text Text:="Направление" & Chr(10) & "выбранного тура" Range("El").AddComment Range("El").Comment.Visible = False Range("El").Comment.Text Text:="Путевка оплачена?" & Chr(10) & "(Да/Нет)" Range("Fl").AddComnent Range("Fl").Comment.Visible = False Range("Fl").Comment.Text Text:="Фото сданы" & Chr(10) & "(Да/Нет)" Range("Gl").AddComment Range("Gl").Comment.Visible = False Range("Gl").Comment.Text Text:="Наличие паспорта" & Chr(10) & " (Да/Нет) " Range("H1").AddComment Range("H1").Comment.Visible = False Range("H1").Comment.Text Text:="Продолжительность" & Chr(10) & "поездки" End Sub Первые две инструкции записанного макроса показывают, как программно закрепляется область, а остальные - как создаются примечания у ячеек рабочего листа. Теперь, при создании приложения эти фрагменты просто надо вставить в требуемое место набираемой программы. Аналогично, при написании фрагмента программы, связанного с созданием текстового поля, лучше всего воспользоваться MacroRecorder, который переведет производимые пользователем вручную действия по созданию текстового поля на язык VBA. Sub Макрос4() ' ' Макрос4 Макрос ' ' ActiveSheet.Shapes. AddTextbox(msoTextOrientationHorizontal, 9.75, 45#, _ 108.75, 96#).Select Selection.Characters.Text = _ "Программа составлена " & Chr(10) & "Андреем Гарнаевым для регистрации " & Chr(10) & "клиентов" & Chr(10) & "туристической " & Chr(10) & "фирмы" With Selection.Characters(Start:=1, Length:=86).Font .Name = "Arial Cyr" .FontStyle = "обычный" .Size = 10 .Strikethrough = False .Superscript = False .Subscript = False .OutlineFont = False .Shadow = False .Underline = xlUnderlineStyleNone, .Colorlndex = xlAutomatic End With Selection.ShapeRange.Fill.ForeColor.SchemeColor = 13 Selection.ShapeRange.Fill.Visible = msoTrue Selection.ShapeRange.Fill.Solid End Sub Из записанного макроса остается только скопировать нужные фрагменты в программу создаваемого приложения о базе данных регистрации туристов. Самостоятельное задание Разработать приложение с диалоговым окном регистрация клиентов отеля "хромая кобыла" (рис. 3), в котором: Счетчик управляет вводом продолжительности проживания В раскрывающемся списке выводятся три типа номеров: одноместный, Двухместный, Люкс, стоимость проживания в которых равна 1500, 1000 и 2500 руб. в сутки Если постоялец заказывает завтраки в номер, то суточная оплата возрастает на 150 руб. При нажатии на кнопку ОК в поле «Стоимость проживания» выводится суммарная стоимость проживания клиента, и все данные из диалогового окна должны вводиться в базу данных, создаваемую на рабочем листе Задание 2 Установить значение процентной ставки в зависимости от категории посетителя тренажерного зала. Если «Студент» – скидка 50%, «Преподаватель» – скидка 30%. Значение процента скидки отобразить в надписи. Пусть стоимость каждой услуги задана числовой константой. При выборе определенной услуги ее стоимость добавляется к значению поля ввода «Сумма». Соответственно при отказе от услуги ее стоимость вычитается. При изменении положения переключателя, кроме изменения процентной ставки, будет обновляться значение «К оплате» |