Здравствуйте!!! Нужна помощь как можно обойтись без MaskEdBox, чтобы сделать маску ввода в TextBox ___-___-___ __ (111-111-111 11) самому написать код нехватает пока еще заниний в VBA.
Пользователь
Сообщений: Регистрация: 23.12.2012
21.05.2010 06:08:37
По этой ссылке можно найти пример программы, в которой реализована требуемая вам маска ввода:
Private Sub txt1_ГПС_Change() 'ГПС государственно пенсионное страхование 11 цифр по маске 354-456-987 56 ' SaveInfo ГПС, Me.txt1_ГПС End Sub
Private Sub txt1_ГПС_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger) 'On Local Error Resume Next If Not IsNumeric(Chr$(KeyAscii)) Then KeyAscii = 0 ' если в поле введена не цифра, то отменяем ввод символа Else 'иначе делаем маску t = Me.txt1_ГПС ' считываем текст из textbox в переменную t If t Like "###" Or t Like "###-###" Then t = t & "-" ' добавляем разделитель после первых 3 и 6 цифр If t Like "###-###-###" Then t = t & " " ' добавляем разделитель после 9 цифр Me.txt1_ГПС = t ' записываем обработанный текст обратно в textbox End If End Sub
Private Sub txt1_ГПС_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer) On Local Error Resume Next t = Me.txt1_ГПС ' считываем текст из textbox в переменную t
' если нажат backspace и последний символ - символ "-" или пробел, стираем 2 последних символа - "-" и последнюю цифру If KeyCode = 8 And (Right(t, 1) = "-" Or Right(t, 1) = " ") Then t = Left$(t, Len(t) - 2): KeyCode = 0
If KeyCode <> 8 And KeyCode <> Asc(vbTab) And Len(t) >= 14 Then KeyCode = 0 ' ограничение на количество введённых символов Me.txt1_ГПС = t ' записываем обработанный текст обратно в textbox End Sub
Вам над только заменить txt1_ГПС на название вашего текстбокса.
Пользователь
Сообщений: Регистрация: 01.01.1970
21.05.2010 07:08:32
Спасибо, если ничего не найду лучше, то воспользуюсь этим кодом. Надо просто обезопасить ввод значений пользовалтеля по максиммуму. по этой Маске поcле полного ее заполнения перемещать курсор стрелками нельзя, а если удалить последний символ и добавить в первый значение уже изменяется т. е. будет ####-###-### # и если ошибся на одну циру и захочешь ее отредактировать с редактированием уже возникают пролемы.
Пользователь
Сообщений: Регистрация: 01.01.1970
21.05.2010 07:14:11
Нашел код ,но его надо редактировать под себя
Пользователь
Сообщений: Регистрация: 01.01.1970
21.05.2010 07:14:38
Const MaskFiller As String = "__.__.__" ' Private Sub TextBox1_Enter() With Me.TextBox1 If Not (.Text Like "##.##.##") Then .Text = MaskFiller End If If Len(.Tag) = 0 Then Application.SendKeys "{INSERT}" .Tag = "-1" End If End With End Sub
Private Sub TextBox1_Exit(ByVal Cancel As MSForms.ReturnBoolean) Me.Tag = vbNullString End Sub
Private Sub TextBox1_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer) Dim iPos As Integer Dim iL As Integer Dim iR As Integer Dim s As String With Me.TextBox1 s = .Text iPos = Int(.Tag) 'Позиция курсора Select Case iPos Case -1 iPos = 0 GoTo SetPos Case 0 If KeyCode < Asc("0") Or KeyCode > Asc("3") Then GoTo NavigateKey Else Mid$(s, iPos + 1, 1) = Chr$(KeyCode) iPos = 1 End If Case 1 Select Case Left$(.Text, 1) Case "0" iL = Asc("1") iR = Asc("9") Case "1", "2" iL = Asc("0") iR = Asc("9") Case "3" iL = Asc("0") iR = Asc("1") End Select If KeyCode < iL Or KeyCode > iR Then GoTo NavigateKey Else Mid$(s, iPos + 1, 1) = Chr$(KeyCode) iPos = 3 End If Case 3 If KeyCode = Asc("0") Or KeyCode = Asc("1") Then Mid$(s, iPos + 1, 1) = Chr$(KeyCode) iPos = 4 Else GoTo NavigateKey End If Case 4 If Mid$(Me.TextBox1.Text, 4, 1) = "0" Then iL = Asc("1") iR = Asc("9") Else iL = Asc("0") iR = Asc("2") End If If KeyCode < iL Or KeyCode > iR Then GoTo NavigateKey Else Mid$(s, iPos + 1, 1) = Chr$(KeyCode) iPos = 6 End If Case 6, 7 If KeyCode < Asc("0") Or KeyCode > Asc("9") Then GoTo NavigateKey Else Mid$(s, iPos + 1, 1) = Chr$(KeyCode) iPos = IIf(iPos = 6, 7, 0) End If End Select GoTo Repaint NavigateKey: Select Case KeyCode Case 37 'Left Select Case iPos Case 1, 4, 7 iPos = iPos - 1 Case 3, 6 iPos = iPos - 2 End Select Case 39 'Right Select Case iPos Case 0, 3, 6 iPos = iPos + 1 Case 1, 4 iPos = iPos + 2 End Select Case 27 'Esc iPos = 0 Case 9 'Tab Exit Sub End Select Repaint: KeyCode = 0 .Text = s SetPos: .SelStart = iPos .SelLength = 1 .Tag = Format$(iPos, "0") End With End Sub
imort
Гость
07.11.2010 18:49:13
{quote}{login=Valdemar_ru}{date=21.05.2010 07:14}{thema=}Вы как американские девочки пишите If Not IsNumeric(Chr$(KeyAscii)) Then
надо писать If KeyAscii < 48 Or KeyAscii > 57 Then{/post}{/quote}