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

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

6   голосов , оценка 3.833 из 5