EXCEL , VBA Ввод данных в контрол типа TextBox
Формулировка задачи:
СПАСИБО
Решение задачи: «EXCEL , VBA Ввод данных в контрол типа TextBox»
textual
Листинг программы
'Вот такой получился у меня код: ' Private Sub txt_КД_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer) 'Для корректной работы процедуры ввода числовой информации в TextBox, неободимо запретить 'вставку скопированных данных в TextBox, копирование, вырезание и удаление данных из TextBox Select Case KeyCode Case vbKeyC And Shift = 2 'Копировать CTRL+C KeyCode = 0 Case vbKeyV And Shift = 2 'Вставить CTRL+V KeyCode = 0 Case vbKeyX And Shift = 2 'Вырезать CTRL+X KeyCode = 0 Case vbKeyDelete 'Удалить DELETE KeyCode = 0 End Select End Sub 'txt_КД - это TextBox, в который пользователь вводит информацию. 'Тип информации – только ЧИСЛОВОЙ, количество знаков до десятичного разделителя определяется переменной LimDig (6 в примере). 'Переменная DecComa определяет количество десятичных разрядов (2 в примере), максимальое - 8. 'Увеличить количество знаков после десятичного разделителя (точки или запятой) просто, - добавьте "решеток" (#) в строке FndComa. ' 'Особенности кода: '-если ввод начат с нуля, к нему добавляется десятичный разделитель; '-если ввод начат с десятичного разделителя добавляется ведущий ноль; '-введеная в поле точка, заменяется на запятую. ' Private Sub txt_КД_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger) On Error Resume Next Dim txt_X As Object Set txt_X = Me.txt_КД 'количество знаков до десятичного разделителя Dim LimDig As Integer LimDig = 6 'количество десятичных разрядов Dim DecComa As Integer DecComa = 2 'строка для поиска знаков после разделителя Dim FndComa As String FndComa = "*," & Left("########", DecComa) 'считываем текст из textbox в переменную t Dim t As String t = txt_X.Value 'флаг присутствия десятичного разделителя Dim FlagComa As Integer FlagComa = 0 If InStr(1, t, ",") Then FlagComa = 1 'запятая 'проверим не превышено ли количество знаков до разделителя If (Len(t) >= (LimDig + FlagComa)) And txt_X.SelStart <= LimDig And KeyAscii <> 44 Then KeyAscii = 0 Select Case KeyAscii 'цифры 1 - 9 и <backspace> (эти символы всегда разрешены)</backspace> Case 49 To 57, 8 'обработка цифры 0 Case 48 'если ввод начат с нуля добавим десятичный разделитель If txt_X.SelStart < 1 Then t = "0" KeyAscii = 44 End If 'обработка десятичного разделителя (44 - код запятой, 46 - код точки) Case 44, 46 'если в поле введена точка, то заменим ее на запятую KeyAscii = 44 'если ввод начат с десятичного разделителя добавим ведущий ноль If txt_X.SelStart < 1 Then t = "0" & t If FlagComa Then KeyAscii = 0 'вторую запятую нельзя '------------если нужен дефис (минус перед числом), раскоментируйте код--------------- 'Case 45 ' If InStr(1, txt_X.Text, "-") Then KeyAscii = 0 'второй минус нельзя ' If txt_X.SelStart Then KeyAscii = 0 'минус допустим только перед числом '------------------------------------------------------------------------------------- Case Else 'остальные символы запрещены KeyAscii = 0 End Select 'проверим не превышено ли количество десятичных разрядов If t Like (FndComa) And txt_X.SelStart >= Len(t) - DecComa Then KeyAscii = 0 'записываем обработанный текст обратно в textbox txt_X.Value = t 'txt_X = Int(t * 100) / 100 End Sub
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д