На этом шаге мы рассмотрим назначение и содержание этого модуля.
Рис.1. Диалоговое окно Поиск
Если такие имеются, то список вариантов найденных клиентов в базе данных с указанием фамилий, имен и номеров записей, отображается в раскрывающемся списке Найденные варианты. В противном случае выдается сообщение о неудачном поиске (рисунок 2).
Рис.2. Сообщение о неудачном поиске клиента
Рис.3. Диалоговое окно Перерегистрация туристов фирмы "С нами не соскучишься"
Приведем текст этого модуля.
Private Sub CommandButton1_Click() ' Процедура поиска клиента Dim i As Integer Dim j As Integer Dim n As Integer Dim Строка As Integer ' i ,j и n - вспомогательные переменные ' В переменной i перебираются номера строк из базы данных, ' начиная со второй и заканчивая последней непустой строкой, ' номер которой определен в переменной Строка. ' Переменная j выполняет роль счетчика, ' учитывающего текущее количество отобранных вариантов. ' Если отобранных вариантов нет, то j присваивается 0. ' n присваивается конечному значению счетчика j Dim Тест As String ' Тест - вспомогательная переменная, в которую вводится очередная ' проверяемая фамилия Dim СписокНайденных() As String Строка = Application.CountA(Sheets("БазаДанных").Columns(1)) Фамилия = Trim(UserForm3.TextBox1.Text) i = 2 j = 0 Do While i <= Строка Тест = Sheets("БазаДанных").Cells(i, 1).Text If IsNumeric(Application.Search(Фамилия, Тест)) = True Then j = j + 1 End If i = i + 1 Loop If j = 0 Then MsgBox "Вышла промашка. А клиента такого и в помине нет.", _ vbExclamation, "Поиск" НайденнаяЗапись = 0 Exit Sub End If n = j ReDim СписокНайденных(1 To n, 0 To 2) As String ' Двумерный динамический массив СписокНайденных используется для заполнения ' раскрывающегося списка с возможными вариантами клиентов. ' Первый и второй столбцы массива содержат фамилию и имя клиента, ' а третий - номера строки из рабочего листа БазаДанных, ' в которой записана информация о клиенте i = 2 j = 0 Do While i <= Строка Тест = Sheets("БазаДанных").Cells(i, 1).Text If IsNumeric(Application.Search(Фамилия, Тест)) = True Then j = j + 1 СписокНайденных(j, 0) = Тест СписокНайденных(j, 1) = Sheets("БазаДанных").Cells(i, 2).Text СписокНайденных(j, 2) = CStr(i) End If i = i + 1 Loop ' Заполнение раскрывающегося списка With UserForm3.ComboBox1 .Clear .ColumnHeads = True .ColumnCount = 3 .ColumnWidths = "60;60;10" .List = СписокНайденных() .ListIndex = 0 End With ' Ввод в переменную НайденнаяЗапись номера строки с ' первым клиентом, выведенным в раскрывающийся список НайденнаяЗапись = CInt(СписокНайденных(1, 2)) End Sub Private Sub CommandButton2_Click() ' Процедура закрытия диалогового окна Поиск, ' открытия диалогового окна Перерегистрация туристов ' и заполнением его информацией о найденном туристе ' Закрывается диалоговое окно Поиск UserForm3.Hide Dim n As Integer ' n - вспомогательная переменная, используемая для ' ввода из базы данных в раскрывающийся список ' направления тура найденного клиента ' (считывается из раскрывающегося списка ' номер строки выбранного клиента) НайденнаяЗапись = UserForm3.ComboBox1.List(UserForm3.ComboBox1.ListIndex, 2) ' Если клиент не найден, то процедура информирует об этом, ' напоминая, что перед редактированием должен быть найден клиент If НайденнаяЗапись = 0 Then MsgBox "Сначала надо найти клиента", vbInformation, "Редактирование" Exit Sub End If ' Ввод из базы данных в диалоговое окно Редактирование ' информации о найденном клиенте With UserForm2 .TextBox1.Text = Sheets("БазаДанных").Cells(НайденнаяЗапись, 1).Value .TextBox2.Text = Sheets("БазаДанных").Cells(НайденнаяЗапись, 2).Value .TextBox3.Text = Sheets("БазаДанных").Cells(НайденнаяЗапись, 8).Value .SpinButton1.Value = Sheets("БазаДанных").Cells(НайденнаяЗапись, 8).Value If Sheets("БазаДанных").Cells(НайденнаяЗапись, 3).Value = "Муж" Then .OptionButton1.Value = True .OptionButton2.Value = False Else .OptionButton1.Value = False .OptionButton2.Value = True End If If Sheets("БазаДанных").Cells(НайденнаяЗапись, 5).Value = "Да" Then .CheckBox1.Value = True Else .CheckBox1.Value = False End If If Sheets("БазаДанных").Cells(НайденнаяЗапись, 6).Value = "Да" Then .CheckBox2.Value = True Else .CheckBox2.Value = False End If If Sheets("БазаДанных").Cells(НайденнаяЗапись, 7).Value = "Да" Then .CheckBox3.Value = True Else .CheckBox3.Value = False End If .ComboBox1.List = Array("Афины", "Берлин", "Лондон") ВыбранныйТур = Cells(НайденнаяЗапись, 4).Value Select Case Trim(ВыбранныйТур) Case Is = "Афины" n = 0 Case Is = "Берлин" n = 1 Case Is = "Лондон" n = 2 End Select .ComboBox1.ListIndex = n .Show End With End Sub Private Sub CommandButton3_Click() ' Процедура закрытия диалогового окна UserForm3.Hide End Sub
На следующем шаге мы рассмотрим модуль UserForm2.