Всем здравствуйте. VBA читаю пока по слогам и застрял на таком моменте. Из формы идет заполнение БД на лист. Не могу совместить две процедуры для одного ComboBox3. По задумке логика такая: 1) Если ФИО уже есть в базе, то выбираем ее из списка ComboBox3 и в остальные ТехтBox'ы и ComboBox'ы вносятся обязательные данные - работает. 2) Если ФИО отсутствует, то все поля заполняются вручную, но ФИО вносится экстравагантно - "ивановии" и преобразуется к виду "Иванов И.И." - отдельно тоже работает. Не получается правильно их совместить. Пробовал их прицепить на разные события ComboBox3, но увы. Прошу помочь.
Всем здравствуйте. VBA читаю пока по слогам и застрял на таком моменте. Из формы идет заполнение БД на лист. Не могу совместить две процедуры для одного ComboBox3. По задумке логика такая: 1) Если ФИО уже есть в базе, то выбираем ее из списка ComboBox3 и в остальные ТехтBox'ы и ComboBox'ы вносятся обязательные данные - работает. 2) Если ФИО отсутствует, то все поля заполняются вручную, но ФИО вносится экстравагантно - "ивановии" и преобразуется к виду "Иванов И.И." - отдельно тоже работает. Не получается правильно их совместить. Пробовал их прицепить на разные события ComboBox3, но увы. Прошу помочь.Shylo
Shylo, примерно вот так. Проверить не могу - у меня Excel сломался, чиню
[vba]
Код
Private Sub ComboBox3_Change() Dim kLastRow As Long, i, fl_ Dim a As String, b As String, c As String, d As String kLastRow = Sheets("бд").Cells(Rows.Count, 2).End(xlUp).Row 'опред послед заполн строки на листе "бд" For i = 2 To kLastRow If Sheets("бд").Cells(i, 2) = Me.ComboBox3.Value Then TextBox8.Value = Sheets("бд").Cells(i, 8).Value ' стаж ComboBox2.Value = Sheets("бд").Cells(i, 9).Value ' класс ComboBox1.Value = Sheets("бд").Cells(i, 3).Value ' колонна fl_ = 1 Exit For End If Next If fl_ Then TextBox3.SetFocus Else ComboBox3.MaxLength = 20 'макс 20 символов a = Me.ComboBox3.Value 'переменной прис значение If a <> "" Then b = Mid(a, 2) 'возвращает остаток строки а со 2-го символа c = Right(a, 2) 'возвращает два символа справа d = Left(a, Len(a) - 2) 'отрезает два символа справа e = Left(c, 1) & "." & Right(c, 1) & "." 'между двумя последними символами ставит точки
'делаем первую букву заглав присоед остат строки с отрезанными 2-мя послед символами, 'присоед пробел а затем инициалы с точками FIO = UCase(Left(d, 1)) & Mid(d, 2) & " " & UCase(Left(c, 1)) & "." & UCase(Right(c, 1)) & "." ComboBox3 = FIO Else Exit Sub End If End If End Sub
Shylo, примерно вот так. Проверить не могу - у меня Excel сломался, чиню
[vba]
Код
Private Sub ComboBox3_Change() Dim kLastRow As Long, i, fl_ Dim a As String, b As String, c As String, d As String kLastRow = Sheets("бд").Cells(Rows.Count, 2).End(xlUp).Row 'опред послед заполн строки на листе "бд" For i = 2 To kLastRow If Sheets("бд").Cells(i, 2) = Me.ComboBox3.Value Then TextBox8.Value = Sheets("бд").Cells(i, 8).Value ' стаж ComboBox2.Value = Sheets("бд").Cells(i, 9).Value ' класс ComboBox1.Value = Sheets("бд").Cells(i, 3).Value ' колонна fl_ = 1 Exit For End If Next If fl_ Then TextBox3.SetFocus Else ComboBox3.MaxLength = 20 'макс 20 символов a = Me.ComboBox3.Value 'переменной прис значение If a <> "" Then b = Mid(a, 2) 'возвращает остаток строки а со 2-го символа c = Right(a, 2) 'возвращает два символа справа d = Left(a, Len(a) - 2) 'отрезает два символа справа e = Left(c, 1) & "." & Right(c, 1) & "." 'между двумя последними символами ставит точки
'делаем первую букву заглав присоед остат строки с отрезанными 2-мя послед символами, 'присоед пробел а затем инициалы с точками FIO = UCase(Left(d, 1)) & Mid(d, 2) & " " & UCase(Left(c, 1)) & "." & UCase(Right(c, 1)) & "." ComboBox3 = FIO Else Exit Sub End If End If End Sub
StoTisteg, в Modul1, процедура pp_uniq. _Boroda_, , Александр, спасибо за оперативность, но уже убегаю на работу, тоже не проверю. После поездки отпишусь. Я за признак fl_ не подумал, хотя видел же его в книжке Максимова. До встречи.
StoTisteg, в Modul1, процедура pp_uniq. _Boroda_, , Александр, спасибо за оперативность, но уже убегаю на работу, тоже не проверю. После поездки отпишусь. Я за признак fl_ не подумал, хотя видел же его в книжке Максимова. До встречи.Shylo