На этом шаге мы рассмотрим основные моменты создания указанного приложения.
Для заполнения базы данных на рабочем листе с помощью редактора пользовательских форм создадим диалоговое окно Регистрация туристов фирмы "Эх, прокачу!" (рисунок 1).
Рис.1. Диалоговое окно Регистрация туристов фирмы "Эх, прокачу!"
При инициализации диалогового окна программа проверяет, есть ли заголовки у полей создаваемой базы данных о регистрации туристов. Если этих заголовков нет, то программа автоматически создает их, снабжая примечаниями, имеющими пояснительный текст о содержании полей (рисунок 2).
Рис.2. База данных о туристах на рабочем листе
Щелчок по кнопке О программе приведет к отображению на экране текстового поля с пояснениями к данной программе. Повторный щелчок по этой кнопке удаляет данное поле (рисунок 3).
Рис.3. Пояснительное текстовое поле, появляющееся при выборе переключателя О программе
Обратите внимание, что у окна приложения пользовательское имя Регистрация. База данных туристов.
Обсудим, как приведенная ниже программа решает перечисленные задачи и что происходит в программе.
Приведем полный текст приложения.
Private Sub CommandButton1_Click() ' Процедура считывания информации из диалогового окна ' и записи ее в базу данных на рабочем листе ' Смысл переменных однозначно определен их названиями Dim Фамилия As String * 20 Dim Имя As String * 20 Dim Пол As String * 20 Dim ВыбранныйТур As String * 20 Dim Оплачено As String * 20 Dim Фото As String * 20 Dim Паспорт As String * 20 Dim Срок As String * 20 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(msoOrientationHorizontal, _ 11.25, 44.25, 110.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 OptionButton1.Value = True With ToggleButton1 .Value = False .ControlTipText = "Информация о программе" End With With ComboBox1 .List = Array("Лондон", "Париж", "Берлин") .ListIndex = 0 End With ' Активизация диалогового окна UserForm1.Show End Sub Sub ЗаголовокРабочегоЛиста() ' Процедура создания заголовков полей базы данных ' Если заголовки существуют, то досрочный выход из процедуры If Range("A1").Value = "Фамилия" Then Range("A2").Select Exit Sub End If ' Если заголовки не существуют, то создаются заголовки полей ActiveSheet.Cells.Clear Range("A1:H1").Value = Array("Фамилия", "Имя", "Пол", _ "Выбранный Тур", "Оплачено", "Фото", "Паспорт", "Срок") 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:="Направление" & Chr(10) & "выбранного тура" Range("E1").AddComment Range("E1").Comment.Visible = False Range("E1").Comment.Text Text:="Путёвка оплачена?" & Chr(10) & "(Да/Нет)" Range("F1").AddComment Range("F1").Comment.Visible = False Range("F1").Comment.Text Text:="Фото сданы" & Chr(10) & "(Да/Нет)" Range("G1").AddComment Range("G1").Comment.Visible = False Range("G1").Comment.Text Text:="Наличие паспорта" & Chr(10) & "(Да/Нет)" Range("H1").AddComment Range("H1").Comment.Visible = False Range("H1").Comment.Text Text:="Продолжительность" & Chr(10) & "поездки" End Sub
В данной программе для определения первой пустой строки в заполняемой базе данных о туристах используется инструкция
НомерСтроки = Application.CountA(ActiveSheet.Columns(1)) + 1,
На следующем шаге мы закончим изучение этого вопроса.