Вопрос такой , есть Умная Таблица (типа клиентской базы) - заполнение ее через Юсэр Форм . Данный Ф.И. клиента - номер Водительского удостоверения - номер Паспорта - номер Телефона и многое другое . Хочу узнать как при наборе в Юсэр Форм осуществить поиск в Таблице данных если такие уже есть .
Здравствуйте ! У меня возник вопрос такой ,
Вопрос такой , есть Умная Таблица (типа клиентской базы) - заполнение ее через Юсэр Форм . Данный Ф.И. клиента - номер Водительского удостоверения - номер Паспорта - номер Телефона и многое другое . Хочу узнать как при наборе в Юсэр Форм осуществить поиск в Таблице данных если такие уже есть . RomanCompass
Dim aList() Sub MakeList(ByVal Sour As Range, ByRef Dest As Object) Dim c As Range, n As Integer, aList() For Each c In Sour.Cells If Len(c.Value) > 0 Then n = n + 1 ReDim Preserve aList(1 To n) aList(n) = c.Value End If Next c Dest.List = aList End Sub ' эта часть убирает пустые значения из комбобоксов
Private Sub UserForm_Activate() MakeList Sheets("data").Range("j2:j20"), ComboBox1 ' диапазон столбца записывается в комбобок, так же комбобокс ищет по первым буквам. End Sub
[/vba] этот код я подвязывал под свою форму, проходит инициализация данных при запуске формы, и они записываются в перечисленные комбобоксы. Посмотрел код вашей формы. У вас там все расписано, и поски изаписи в комбобоксы. Сделайте по аналогии для необходимых текст боксов, заменив их комбами.
[vba]
Код
Dim aList() Sub MakeList(ByVal Sour As Range, ByRef Dest As Object) Dim c As Range, n As Integer, aList() For Each c In Sour.Cells If Len(c.Value) > 0 Then n = n + 1 ReDim Preserve aList(1 To n) aList(n) = c.Value End If Next c Dest.List = aList End Sub ' эта часть убирает пустые значения из комбобоксов
Private Sub UserForm_Activate() MakeList Sheets("data").Range("j2:j20"), ComboBox1 ' диапазон столбца записывается в комбобок, так же комбобокс ищет по первым буквам. End Sub
[/vba] этот код я подвязывал под свою форму, проходит инициализация данных при запуске формы, и они записываются в перечисленные комбобоксы. Посмотрел код вашей формы. У вас там все расписано, и поски изаписи в комбобоксы. Сделайте по аналогии для необходимых текст боксов, заменив их комбами.Santtic
Сообщение отредактировал Santtic - Понедельник, 04.10.2021, 16:44
Santtic, Я правильно понял данный код будет находить совпадение в таблице по Ф.И. или НОМЕРА ТЕЛЕФОНА или НОМЕР ПАСПОРТА или НОМЕР ВОДИТЕЛЬСКОГО УДОСТОВЕРЕНИЯ . Суть в том что если данные клиента уже есть в таблице (то есть он пользовался нашими услугами ) чтобы при заполнение TEXTBOX-ос , система оповещала каким то образом MSGBOX выводила данные строки или к примеру показывала строку в таблице .
Santtic, Я правильно понял данный код будет находить совпадение в таблице по Ф.И. или НОМЕРА ТЕЛЕФОНА или НОМЕР ПАСПОРТА или НОМЕР ВОДИТЕЛЬСКОГО УДОСТОВЕРЕНИЯ . Суть в том что если данные клиента уже есть в таблице (то есть он пользовался нашими услугами ) чтобы при заполнение TEXTBOX-ос , система оповещала каким то образом MSGBOX выводила данные строки или к примеру показывала строку в таблице .RomanCompass
Private Sub TextBox_passport_Change() Dim НайденноеЗначение As Range If Len(TextBox_passport.Value) Then Set НайденноеЗначение = Sheets("2021").ListObjects("OrderList").DataBodyRange.Columns(13).Find(TextBox_passport.Value, LookIn:=xlValues, LookAt:=xlWhole) If Not НайденноеЗначение Is Nothing Then MsgBox TextBox_passport.Value & " есть в строке " & НайденноеЗначение.Row End If End If End Sub
[/vba]
Для паспорта [vba]
Код
Private Sub TextBox_passport_Change() Dim НайденноеЗначение As Range If Len(TextBox_passport.Value) Then Set НайденноеЗначение = Sheets("2021").ListObjects("OrderList").DataBodyRange.Columns(13).Find(TextBox_passport.Value, LookIn:=xlValues, LookAt:=xlWhole) If Not НайденноеЗначение Is Nothing Then MsgBox TextBox_passport.Value & " есть в строке " & НайденноеЗначение.Row End If End If End Sub
Private Sub TextBox_name_Change() Dim ws1 As Worksheet, tbl1 As ListObject, LookupValue As String, FoundCell As Range, answer
If Trim(Me.TextBox_name.Value) = "" Then MsgBox "Пожалуйста, Введите Имя которого нет в Базе" Me.TextBox_name.SetFocus Exit Sub End If
Set ws1 = Sheets("2021") Set tbl1 = ws1.ListObjects("OrderList") LookupValue = Me.TextBox_name.Value On Error Resume Next Set FoundCell = tbl1.DataBodyRange.Columns(2).Find(LookupValue, LookIn:=xlValues, LookAt:=xlWhole) On Error GoTo 0
If Not FoundCell Is Nothing Then answer = MsgBox("Это Имя уже существует в данной Базе. " & " в СТРОКЕ НОМЕР " & FoundCell.Row & vbCrLf & "Вы Хотите Повторить данное Имя", vbQuestion + vbYesNo + vbDefaultButton2, " Дублировать ? ") Me.ComboBox_cartype.SetFocus
If answer = vbNo Then ' ClearForm Me.TextBox_name.Value = "" Me.TextBox_name.SetFocus Exit Sub End If
End If
End Sub
[/vba]
RomanCompass, Ещё как вариант для Имени в Базе.
[vba]
Код
Private Sub TextBox_name_Change() Dim ws1 As Worksheet, tbl1 As ListObject, LookupValue As String, FoundCell As Range, answer
If Trim(Me.TextBox_name.Value) = "" Then MsgBox "Пожалуйста, Введите Имя которого нет в Базе" Me.TextBox_name.SetFocus Exit Sub End If
Set ws1 = Sheets("2021") Set tbl1 = ws1.ListObjects("OrderList") LookupValue = Me.TextBox_name.Value On Error Resume Next Set FoundCell = tbl1.DataBodyRange.Columns(2).Find(LookupValue, LookIn:=xlValues, LookAt:=xlWhole) On Error GoTo 0
If Not FoundCell Is Nothing Then answer = MsgBox("Это Имя уже существует в данной Базе. " & " в СТРОКЕ НОМЕР " & FoundCell.Row & vbCrLf & "Вы Хотите Повторить данное Имя", vbQuestion + vbYesNo + vbDefaultButton2, " Дублировать ? ") Me.ComboBox_cartype.SetFocus
If answer = vbNo Then ' ClearForm Me.TextBox_name.Value = "" Me.TextBox_name.SetFocus Exit Sub End If
RomanCompass, спасибо MikeVol ,Erjoma1981 за помощь! Оба варианта работают . Единственное в варианте от MikeVol убрал МsgBox "Пожалуйста, Введите Имя которого нет в Базе" Какой лучше выбрать ? В том плане чтобы прога работала легче и стабильно . Не знаю может я сейчас ерунду несу поправьте если кто разбирается .
RomanCompass, спасибо MikeVol ,Erjoma1981 за помощь! Оба варианта работают . Единственное в варианте от MikeVol убрал МsgBox "Пожалуйста, Введите Имя которого нет в Базе" Какой лучше выбрать ? В том плане чтобы прога работала легче и стабильно . Не знаю может я сейчас ерунду несу поправьте если кто разбирается .RomanCompass
Сново поправляюсь Не подумал об этом изначально .Нужен поиск этих данных по всех книге . Можно сделать чтобы показывало строку в таблице с данными ? (а не просто выводило сообщение с номером строки ) Дело в том что таблица будет большая и не совсем удобно будет искать строку .
Сново поправляюсь Не подумал об этом изначально .Нужен поиск этих данных по всех книге . Можно сделать чтобы показывало строку в таблице с данными ? (а не просто выводило сообщение с номером строки ) Дело в том что таблица будет большая и не совсем удобно будет искать строку .
Private Sub TextBox_passport_Change() Dim НайденноеЗначение As Range If Len(TextBox_passport.Value) Then Set НайденноеЗначение = Sheets("2021").ListObjects("OrderList").DataBodyRange.Columns(13).Find(TextBox_passport.Value, LookIn:=xlValues, LookAt:=xlWhole) If Not НайденноеЗначение Is Nothing Then 'MsgBox TextBox_passport.Value & " есть в строке " & НайденноеЗначение.Row Sheets("2021").Rows(НайденноеЗначение.Row).Select End If End If End Sub
[/vba]
[vba]
Код
Private Sub TextBox_passport_Change() Dim НайденноеЗначение As Range If Len(TextBox_passport.Value) Then Set НайденноеЗначение = Sheets("2021").ListObjects("OrderList").DataBodyRange.Columns(13).Find(TextBox_passport.Value, LookIn:=xlValues, LookAt:=xlWhole) If Not НайденноеЗначение Is Nothing Then 'MsgBox TextBox_passport.Value & " есть в строке " & НайденноеЗначение.Row Sheets("2021").Rows(НайденноеЗначение.Row).Select End If End If End Sub
RomanCompass, Доброго времени суток. Упрощённый вариант вам до кучи с выделением строки с уже имеющим именем в базе. [vba]
Код
Private Sub TextBox_name_Change() Dim ws1 As Worksheet, tbl1 As ListObject, FoundCell As Range, answer As VbMsgBoxResult
Set ws1 = Sheets("2021") Set tbl1 = ws1.ListObjects("OrderList") On Error Resume Next Set FoundCell = tbl1.DataBodyRange.Columns(2).Find(Me.TextBox_name.Value, LookIn:=xlValues, LookAt:=xlWhole) On Error GoTo 0
If Not FoundCell Is Nothing Then Rows(FoundCell.Row).Select End If
End Sub
[/vba]
RomanCompass, Доброго времени суток. Упрощённый вариант вам до кучи с выделением строки с уже имеющим именем в базе. [vba]
Код
Private Sub TextBox_name_Change() Dim ws1 As Worksheet, tbl1 As ListObject, FoundCell As Range, answer As VbMsgBoxResult
Set ws1 = Sheets("2021") Set tbl1 = ws1.ListObjects("OrderList") On Error Resume Next Set FoundCell = tbl1.DataBodyRange.Columns(2).Find(Me.TextBox_name.Value, LookIn:=xlValues, LookAt:=xlWhole) On Error GoTo 0
If Not FoundCell Is Nothing Then Rows(FoundCell.Row).Select End If