Добрый день. На форме есть три текстбокса в которые вводятся разные значения(цифры через тире ,цифры через запятую и тире и ввод чисел через запятую. Как запретить ввод второй запятой в ТеxtBox2, чтобы можно было производить ввод только :цифр через запятую и тире: 0,6-8,7.
Добрый день. На форме есть три текстбокса в которые вводятся разные значения(цифры через тире ,цифры через запятую и тире и ввод чисел через запятую. Как запретить ввод второй запятой в ТеxtBox2, чтобы можно было производить ввод только :цифр через запятую и тире: 0,6-8,7.parovoznik
Я частично разбирался в логике вами написанного, поэтому добавлял строку [vba]
Код
Private Sub TextBox2_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger) On Error Resume Next Select Case KeyAscii Case 48 To 57, 8 Case 44, 46 If Right(Me.TextBox2.Text, 1) = "," Or Right(Me.TextBox2.Text, 1) = "." Then KeyAscii = 0 Case 45 KeyAscii = 44 KeyAscii = 45 If InStr(1, Me.TextBox2.Text, ",") And InStr(Me.TextBox2.Text, ",", "-") <> 0 Then ' KeyAscii = 0 End If Case Else KeyAscii = 0 ' остальные символы запрещены KeyAscii = MsgBox("Можно вводить только цифры через запятую и тире", vbInformation, "Запрет ввода") End Select End Sub
[/vba]
Я частично разбирался в логике вами написанного, поэтому добавлял строку [vba]
Код
Private Sub TextBox2_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger) On Error Resume Next Select Case KeyAscii Case 48 To 57, 8 Case 44, 46 If Right(Me.TextBox2.Text, 1) = "," Or Right(Me.TextBox2.Text, 1) = "." Then KeyAscii = 0 Case 45 KeyAscii = 44 KeyAscii = 45 If InStr(1, Me.TextBox2.Text, ",") And InStr(Me.TextBox2.Text, ",", "-") <> 0 Then ' KeyAscii = 0 End If Case Else KeyAscii = 0 ' остальные символы запрещены KeyAscii = MsgBox("Можно вводить только цифры через запятую и тире", vbInformation, "Запрет ввода") End Select End Sub
parovoznik, Попробуйте этот вариант -заменяет точку на запятую - подряд не вводит две запятые - два тире запрещает - автоматом ставит тире, если ставить запятую после первого числа вида 0,0
[vba]
Код
Private Sub TextBox2_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger) Dim iZap% With Me.TextBox2 Select Case KeyAscii Case 48 To 57, 8 Case 44, 46 If KeyAscii = 46 Then KeyAscii = 44 'заменим точку на запятую iZap = (Len(.Text) - Len(Replace(.Text, Chr(KeyAscii), ""))) 'количество запятых в уже введенной строке If Right(.Text, 1) = "," Then KeyAscii = 0: Exit Sub 'если предыдущий символ "," то запрещаем ввод If iZap = 1 And InStr(1, .Text, Chr(45)) < 1 Then KeyAscii = 45: Exit Sub 'запятая уже есть, тире нет, то поставим тире If iZap >= 2 Then KeyAscii = 0 'в веденной строке больше двух запятых, запрещаем ввод Case 45 If (Len(.Text) - Len(Replace(.Text, Chr(KeyAscii), ""))) >= 1 Then KeyAscii = 0 'если уже есть тире, то запрещаем ввод Case Else KeyAscii = 0'MsgBox("Можно вводить только цифры через запятую и тире", vbInformation, "Запрет ввода") End Select End With End Sub
[/vba]
parovoznik, Попробуйте этот вариант -заменяет точку на запятую - подряд не вводит две запятые - два тире запрещает - автоматом ставит тире, если ставить запятую после первого числа вида 0,0
[vba]
Код
Private Sub TextBox2_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger) Dim iZap% With Me.TextBox2 Select Case KeyAscii Case 48 To 57, 8 Case 44, 46 If KeyAscii = 46 Then KeyAscii = 44 'заменим точку на запятую iZap = (Len(.Text) - Len(Replace(.Text, Chr(KeyAscii), ""))) 'количество запятых в уже введенной строке If Right(.Text, 1) = "," Then KeyAscii = 0: Exit Sub 'если предыдущий символ "," то запрещаем ввод If iZap = 1 And InStr(1, .Text, Chr(45)) < 1 Then KeyAscii = 45: Exit Sub 'запятая уже есть, тире нет, то поставим тире If iZap >= 2 Then KeyAscii = 0 'в веденной строке больше двух запятых, запрещаем ввод Case 45 If (Len(.Text) - Len(Replace(.Text, Chr(KeyAscii), ""))) >= 1 Then KeyAscii = 0 'если уже есть тире, то запрещаем ввод Case Else KeyAscii = 0'MsgBox("Можно вводить только цифры через запятую и тире", vbInformation, "Запрет ввода") End Select End With End Sub