Добрый день. На форме размещен текстбокс для ввода кода товаров. Разрешен ввод : 2 буквы заглавные Английские, один пробел и шесть цифр. остальные символы запрещены. Сейчас в поле можно ввести только один код. Как скорректировать код ,что бы можно было ввести неограниченное количество кода товара в поле текстбокса через запятую.
Добрый день. На форме размещен текстбокс для ввода кода товаров. Разрешен ввод : 2 буквы заглавные Английские, один пробел и шесть цифр. остальные символы запрещены. Сейчас в поле можно ввести только один код. Как скорректировать код ,что бы можно было ввести неограниченное количество кода товара в поле текстбокса через запятую.parovoznik
parovoznik, я может конечно чего не понял, но у вас и так в текст бокс можно сколько много угодно ввести кода товара через запятую и при нажатии перенести на форму этот текст в таблице отобразится
parovoznik, я может конечно чего не понял, но у вас и так в текст бокс можно сколько много угодно ввести кода товара через запятую и при нажатии перенести на форму этот текст в таблице отобразитсяKamikadze_N
parovoznik, здравствуйте. А может проверять не при каждом нажатии клавиш, а перед записью на лист? [vba]
Код
Private Sub B_ДобавитьнаЛист_Click() Dim LastRow As Long Dim objMatches As Object, objMatch As Object, temp, el, k% k = 0 With CreateObject("VBScript.RegExp") .Global = True: .ignoreCase = False .Pattern = "^[A-Z]{2}\s\d{6}$" temp = Split(Trim(TextBox2.Value), ",") For Each el In temp k = k + 1 If .test(el) = False Then MsgBox "Код №" & k & " не соответствует шаблону", vbCritical: Exit Sub Next el End With With Sheets("отчет") LastRow = .Cells(Rows.Count, 2).End(xlUp).Row Cells(LastRow + 1, 2) = Trim(Me.TextBox2.Value) Range(.Cells(6, 2), .Cells(LastRow + 1, 2)).Borders.LineStyle = xlContinuous ' обрамление ячеек End With Unload Me End Sub
[/vba]
parovoznik, здравствуйте. А может проверять не при каждом нажатии клавиш, а перед записью на лист? [vba]
Код
Private Sub B_ДобавитьнаЛист_Click() Dim LastRow As Long Dim objMatches As Object, objMatch As Object, temp, el, k% k = 0 With CreateObject("VBScript.RegExp") .Global = True: .ignoreCase = False .Pattern = "^[A-Z]{2}\s\d{6}$" temp = Split(Trim(TextBox2.Value), ",") For Each el In temp k = k + 1 If .test(el) = False Then MsgBox "Код №" & k & " не соответствует шаблону", vbCritical: Exit Sub Next el End With With Sheets("отчет") LastRow = .Cells(Rows.Count, 2).End(xlUp).Row Cells(LastRow + 1, 2) = Trim(Me.TextBox2.Value) Range(.Cells(6, 2), .Cells(LastRow + 1, 2)).Borders.LineStyle = xlContinuous ' обрамление ячеек End With Unload Me End Sub
Private Sub TextBox2_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger) On Local Error Resume Next Dim i As Long Dim j As Long Static x& i = Len(TextBox2) + 1 j = KeyAscii If i = 10 + x Then If j = 44 Then TextBox2 = TextBox2 & Chr(44) x = i End If KeyAscii = 0 Exit Sub End If If i < 3 + x Then If Not IsNumeric(Chr(j)) Then TextBox2 = TextBox2 & UCase(Chr(j)) If i = 3 + x Then If j = 32 Then TextBox2 = TextBox2 & Chr(j) If i > 3 + x Then If IsNumeric(Chr(j)) Then TextBox2 = TextBox2 & Chr(j) KeyAscii = 0 End Sub
[/vba]
А я так схимичил, вроде работает [vba]
Код
Private Sub TextBox2_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger) On Local Error Resume Next Dim i As Long Dim j As Long Static x& i = Len(TextBox2) + 1 j = KeyAscii If i = 10 + x Then If j = 44 Then TextBox2 = TextBox2 & Chr(44) x = i End If KeyAscii = 0 Exit Sub End If If i < 3 + x Then If Not IsNumeric(Chr(j)) Then TextBox2 = TextBox2 & UCase(Chr(j)) If i = 3 + x Then If j = 32 Then TextBox2 = TextBox2 & Chr(j) If i > 3 + x Then If IsNumeric(Chr(j)) Then TextBox2 = TextBox2 & Chr(j) KeyAscii = 0 End Sub
Или вот так тоже работает, а первый раз я на код не посмотрел прост вставил данные из шаблона, думал так и задумано что бы копирование работало
Или вот так тоже работает, а первый раз я на код не посмотрел прост вставил данные из шаблона, думал так и задумано что бы копирование работалоKamikadze_N
Manyasha, а что касается проверке при каждом вводе отдельного элемента, я так понял это как раз таки фишка (типо защита от дурака). Для того что бы ускорить ввод данных, то есть если в первом артикуле ошибся а ввел уже в строку символов 50, что бы не искать потом ошибку и время на это не тратить
Manyasha, а что касается проверке при каждом вводе отдельного элемента, я так понял это как раз таки фишка (типо защита от дурака). Для того что бы ускорить ввод данных, то есть если в первом артикуле ошибся а ввел уже в строку символов 50, что бы не искать потом ошибку и время на это не тратитьKamikadze_N
Private Sub TextBox2_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger) Select Case KeyAscii Case 32, 44, 65 To 90 Case 97 To 122 KeyAscii = KeyAscii - 32 Case Else KeyAscii = 0 End Select End Sub
[/vba] Или я что-то не понял?
[vba]
Код
Private Sub TextBox2_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger) Select Case KeyAscii Case 32, 44, 65 To 90 Case 97 To 122 KeyAscii = KeyAscii - 32 Case Else KeyAscii = 0 End Select End Sub