Здравствуйте! как можно запретить ввод одинаковых значений в TextBox в форме? в форме есть текстбокс в который вносится текст далее по нажатию кнопки "ок" это значение вставляется в пустую ячейку в столбце "В". как я это вижу: вводим значение в текстбокс, затем переводим фокус на следующий элемент формы, если в столбце "В" такое значение уже есть, то появляется msgbox с уведомлением об ошибке и просьбе ввести другое название!
Здравствуйте! как можно запретить ввод одинаковых значений в TextBox в форме? в форме есть текстбокс в который вносится текст далее по нажатию кнопки "ок" это значение вставляется в пустую ячейку в столбце "В". как я это вижу: вводим значение в текстбокс, затем переводим фокус на следующий элемент формы, если в столбце "В" такое значение уже есть, то появляется msgbox с уведомлением об ошибке и просьбе ввести другое название!AKSENOV048
разобрался Private Sub TextBox2_Change() With Sheets(1) Set r = .Range(.[B2], .Range("B" & .Rows.Count).End(xlUp)) End With Set x = r.Find(what:=TextBox2.Value, LookAt:=xlWhole, LookIn:=xlValues) If Not x Is Nothing Then MsgBox ("ошибочка, " & TextBox2.Value & " уже существует") End If End Sub
разобрался Private Sub TextBox2_Change() With Sheets(1) Set r = .Range(.[B2], .Range("B" & .Rows.Count).End(xlUp)) End With Set x = r.Find(what:=TextBox2.Value, LookAt:=xlWhole, LookIn:=xlValues) If Not x Is Nothing Then MsgBox ("ошибочка, " & TextBox2.Value & " уже существует") End If End SubAKSENOV048
Сообщение отредактировал AKSENOV048 - Четверг, 08.09.2011, 19:32
Чтоб шрифт увеличить - это нужно вместо msgbox свою форму рисовать. А два раза - потому что перевод регистра тоже срабатывает как TextBox1_Change. Нужно или сразу в верхнем вводить, или доп.условие вводить - типа если до перемены регистра и после перемены значения разные, то не искать, иначе искать.
Вот вроде этого (даже без else обошлось):
Code
Private Sub TextBox1_Change() Dim a$ a = Me.TextBox1 Me.TextBox1 = UCase(Me.TextBox1) 'верхний регистр If a = Me.TextBox1 Then With Sheets(1) Set r = .Range(.[A2], .Range("A" & .Rows.Count).End(xlUp)) End With Set x = r.Find(what:=TextBox1.Value, LookAt:=xlWhole, MatchCase:=False) If Not x Is Nothing Then MsgBox ("Внимание! " & TextBox1.Value & " уже существует") End If End If End Sub
Такс, ещё недоработка - после MsgBox ("Внимание! " & TextBox1.Value & " уже существует") я бы добавил Me.TextBox1 = Left(Me.TextBox1, Len(Me.TextBox1) - 1) Иначе после месиджбокса можно нажать ОК и повторное значение занесётся на лист.
Хотя в целом - такую проверку нужно делать после нажатия ОК - т.к. иначе или можно занести повторное значение, как в коде выше, или невозможно занести значение длиннее уже существующего, как с моей добавкой ниже
Чтоб шрифт увеличить - это нужно вместо msgbox свою форму рисовать. А два раза - потому что перевод регистра тоже срабатывает как TextBox1_Change. Нужно или сразу в верхнем вводить, или доп.условие вводить - типа если до перемены регистра и после перемены значения разные, то не искать, иначе искать.
Вот вроде этого (даже без else обошлось):
Code
Private Sub TextBox1_Change() Dim a$ a = Me.TextBox1 Me.TextBox1 = UCase(Me.TextBox1) 'верхний регистр If a = Me.TextBox1 Then With Sheets(1) Set r = .Range(.[A2], .Range("A" & .Rows.Count).End(xlUp)) End With Set x = r.Find(what:=TextBox1.Value, LookAt:=xlWhole, MatchCase:=False) If Not x Is Nothing Then MsgBox ("Внимание! " & TextBox1.Value & " уже существует") End If End If End Sub
Такс, ещё недоработка - после MsgBox ("Внимание! " & TextBox1.Value & " уже существует") я бы добавил Me.TextBox1 = Left(Me.TextBox1, Len(Me.TextBox1) - 1) Иначе после месиджбокса можно нажать ОК и повторное значение занесётся на лист.
Хотя в целом - такую проверку нужно делать после нажатия ОК - т.к. иначе или можно занести повторное значение, как в коде выше, или невозможно занести значение длиннее уже существующего, как с моей добавкой ниже Hugo
Private Sub CommandButton1_Click() With Sheets(1) Set r = .Range(.[A2], .Range("A" & .Rows.Count).End(xlUp)) End With Set x = r.Find(what:=TextBox1.Value, LookAt:=xlWhole) If Not x Is Nothing Then Beep MsgBox ("Внимание! " & TextBox1.Value & " уже существует") Exit Sub End If Selection.Value = Me.TextBox1 Unload Me End Sub
Private Sub TextBox1_Change() Me.TextBox1 = UCase(Me.TextBox1) 'верхний регистр End Sub
звук Всунь туда Beep
А я бы написал примерно так:
Code
Private Sub CommandButton1_Click() With Sheets(1) Set r = .Range(.[A2], .Range("A" & .Rows.Count).End(xlUp)) End With Set x = r.Find(what:=TextBox1.Value, LookAt:=xlWhole) If Not x Is Nothing Then Beep MsgBox ("Внимание! " & TextBox1.Value & " уже существует") Exit Sub End If Selection.Value = Me.TextBox1 Unload Me End Sub
Private Sub TextBox1_Change() Me.TextBox1 = UCase(Me.TextBox1) 'верхний регистр End Sub