Страницы: 1
RSS
Маска ввода значиний в TextBox
 
Здравствуйте!!! Нужна помощь  
как можно обойтись без MaskEdBox, чтобы сделать маску ввода в TextBox  
___-___-___ __ (111-111-111 11)  
самому написать код нехватает пока еще заниний в VBA.
 
По этой ссылке можно найти пример программы, в которой реализована требуемая вам маска ввода:  
http://www.programmersforum.ru/showpost.php?p=239236&postcount=11  
 
 
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_ГПС на название вашего текстбокса.
 
Спасибо, если ничего не найду лучше, то воспользуюсь этим кодом.  
Надо просто обезопасить ввод значений пользовалтеля по максиммуму.  
по этой Маске поcле полного ее заполнения перемещать курсор стрелками нельзя, а если удалить последний символ и добавить в первый значение уже изменяется  
т. е. будет ####-###-### # и если ошибся на одну циру и захочешь ее отредактировать с редактированием уже возникают пролемы.
 
Нашел код ,но его надо редактировать под себя
 
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
 
{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}
Страницы: 1
Читают тему
Наверх