Домашняя страница Undo Do New Save Карта сайта Обратная связь Поиск по форуму
МИР MS EXCEL - Гость.xls

Вход

Регистрация

Напомнить пароль

 

= Мир MS Excel/Проверка на ввод числового значения в текстбокс. - Мир MS Excel

Старая форма входа
  • Страница 1 из 1
  • 1
Модератор форума: китин, _Boroda_  
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Проверка на ввод числового значения в текстбокс. (Макросы/Sub)
Проверка на ввод числового значения в текстбокс.
parovoznik Дата: Пятница, 16.09.2016, 13:30 | Сообщение № 1
Группа: Проверенные
Ранг: Обитатель
Сообщений: 442
Репутация: 26 ±
Замечаний: 0% ±

Excel 2013
Добрый день.
На форме есть три текстбокса в которые вводятся разные значения(цифры через тире ,цифры через запятую и тире и ввод чисел через запятую.
Как запретить ввод второй запятой в ТеxtBox2, чтобы можно было производить ввод только :цифр через запятую и тире: 0,6-8,7.
К сообщению приложен файл: ____.xlsm (28.1 Kb)
 
Ответить
СообщениеДобрый день.
На форме есть три текстбокса в которые вводятся разные значения(цифры через тире ,цифры через запятую и тире и ввод чисел через запятую.
Как запретить ввод второй запятой в ТеxtBox2, чтобы можно было производить ввод только :цифр через запятую и тире: 0,6-8,7.

Автор - parovoznik
Дата добавления - 16.09.2016 в 13:30
devilkurs Дата: Пятница, 16.09.2016, 13:51 | Сообщение № 2
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 167
Репутация: 43 ±
Замечаний: 0% ±

Excel 2007, 2010
запрет на ввод второй подряд запятой/точки
[vba]
Код
        Case 44, 46
            If Right(Me.TextBox2.Text, 1) = "," Or Right(Me.TextBox2.Text, 1) = "." Then KeyAscii = 0
[/vba]




Сообщение отредактировал devilkurs - Пятница, 16.09.2016, 14:02
 
Ответить
Сообщениезапрет на ввод второй подряд запятой/точки
[vba]
Код
        Case 44, 46
            If Right(Me.TextBox2.Text, 1) = "," Or Right(Me.TextBox2.Text, 1) = "." Then KeyAscii = 0
[/vba]

Автор - devilkurs
Дата добавления - 16.09.2016 в 13:51
parovoznik Дата: Пятница, 16.09.2016, 14:07 | Сообщение № 3
Группа: Проверенные
Ранг: Обитатель
Сообщений: 442
Репутация: 26 ±
Замечаний: 0% ±

Excel 2013
devilkurs, что то не работает код? Сможете подправить.
К сообщению приложен файл: Test2.xlsm (28.3 Kb)
 
Ответить
Сообщениеdevilkurs, что то не работает код? Сможете подправить.

Автор - parovoznik
Дата добавления - 16.09.2016 в 14:07
devilkurs Дата: Пятница, 16.09.2016, 14:44 | Сообщение № 4
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 167
Репутация: 43 ±
Замечаний: 0% ±

Excel 2007, 2010
Я частично разбирался в логике вами написанного, поэтому добавлял строку
[vba]
Код
Private Sub TextBox2_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
On Error Resume Next
    Select Case KeyAscii
        Case 48 To 57, 8
        Case 44, 46
            If Right(Me.TextBox2.Text, 1) = "," Or Right(Me.TextBox2.Text, 1) = "." Then KeyAscii = 0
        Case 45
            KeyAscii = 44
            KeyAscii = 45
            If InStr(1, Me.TextBox2.Text, ",") And InStr(Me.TextBox2.Text, ",", "-") <> 0 Then
'
               KeyAscii = 0
             End If
        Case Else
            KeyAscii = 0        ' остальные символы запрещены
           KeyAscii = MsgBox("Можно вводить только цифры через запятую   и тире", vbInformation, "Запрет ввода")
         End Select
End Sub
[/vba]


 
Ответить
СообщениеЯ частично разбирался в логике вами написанного, поэтому добавлял строку
[vba]
Код
Private Sub TextBox2_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
On Error Resume Next
    Select Case KeyAscii
        Case 48 To 57, 8
        Case 44, 46
            If Right(Me.TextBox2.Text, 1) = "," Or Right(Me.TextBox2.Text, 1) = "." Then KeyAscii = 0
        Case 45
            KeyAscii = 44
            KeyAscii = 45
            If InStr(1, Me.TextBox2.Text, ",") And InStr(Me.TextBox2.Text, ",", "-") <> 0 Then
'
               KeyAscii = 0
             End If
        Case Else
            KeyAscii = 0        ' остальные символы запрещены
           KeyAscii = MsgBox("Можно вводить только цифры через запятую   и тире", vbInformation, "Запрет ввода")
         End Select
End Sub
[/vba]

Автор - devilkurs
Дата добавления - 16.09.2016 в 14:44
parovoznik Дата: Пятница, 16.09.2016, 15:13 | Сообщение № 5
Группа: Проверенные
Ранг: Обитатель
Сообщений: 442
Репутация: 26 ±
Замечаний: 0% ±

Excel 2013
devilkurs, спасибо,но точка вводится тоже.(надо что бы только запятая вводилась). Хорошо буду аккуратен при вводе. hands
 
Ответить
Сообщениеdevilkurs, спасибо,но точка вводится тоже.(надо что бы только запятая вводилась). Хорошо буду аккуратен при вводе. hands

Автор - parovoznik
Дата добавления - 16.09.2016 в 15:13
_Boroda_ Дата: Пятница, 16.09.2016, 15:41 | Сообщение № 6
Группа: Модераторы
Ранг: Местный житель
Сообщений: 16675
Репутация: 6481 ±
Замечаний: 0% ±

2003; 2007; 2010; 2013 RUS
Чтобы не выводилась точка уберите символ 46
Или напишите
[vba]
Код
...
        Case 44, 46
        KeyAscii = 44
...
[/vba]


Скажи мне, кудесник, любимец ба’гов...
Платная помощь:
Boroda_Excel@mail.ru
Яндекс-деньги: 41001632713405 | Webmoney: R289877159277; Z102172301748; E177867141995
 
Ответить
СообщениеЧтобы не выводилась точка уберите символ 46
Или напишите
[vba]
Код
...
        Case 44, 46
        KeyAscii = 44
...
[/vba]

Автор - _Boroda_
Дата добавления - 16.09.2016 в 15:41
devilkurs Дата: Пятница, 16.09.2016, 16:02 | Сообщение № 7
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 167
Репутация: 43 ±
Замечаний: 0% ±

Excel 2007, 2010
parovoznik,
Попробуйте этот вариант
-заменяет точку на запятую
- подряд не вводит две запятые
- два тире запрещает
- автоматом ставит тире, если ставить запятую после первого числа вида 0,0

[vba]
Код
Private Sub TextBox2_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
  Dim iZap%
  With Me.TextBox2
    Select Case KeyAscii
        Case 48 To 57, 8
        Case 44, 46
            If KeyAscii = 46 Then KeyAscii = 44 'заменим точку на запятую
            iZap = (Len(.Text) - Len(Replace(.Text, Chr(KeyAscii), ""))) 'количество запятых в уже введенной строке
            If Right(.Text, 1) = "," Then KeyAscii = 0: Exit Sub  'если предыдущий символ "," то запрещаем ввод
            If iZap = 1 And InStr(1, .Text, Chr(45)) < 1 Then KeyAscii = 45: Exit Sub 'запятая уже есть, тире нет, то поставим тире
            If iZap >= 2 Then KeyAscii = 0  'в веденной строке больше двух запятых, запрещаем ввод
        Case 45
            If (Len(.Text) - Len(Replace(.Text, Chr(KeyAscii), ""))) >= 1 Then KeyAscii = 0 'если уже есть тире, то запрещаем ввод
        Case Else
           KeyAscii = 0'MsgBox("Можно вводить только цифры через запятую и тире", vbInformation, "Запрет ввода")
    End Select
  End With
End Sub
[/vba]




Сообщение отредактировал devilkurs - Пятница, 16.09.2016, 16:05
 
Ответить
Сообщениеparovoznik,
Попробуйте этот вариант
-заменяет точку на запятую
- подряд не вводит две запятые
- два тире запрещает
- автоматом ставит тире, если ставить запятую после первого числа вида 0,0

[vba]
Код
Private Sub TextBox2_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
  Dim iZap%
  With Me.TextBox2
    Select Case KeyAscii
        Case 48 To 57, 8
        Case 44, 46
            If KeyAscii = 46 Then KeyAscii = 44 'заменим точку на запятую
            iZap = (Len(.Text) - Len(Replace(.Text, Chr(KeyAscii), ""))) 'количество запятых в уже введенной строке
            If Right(.Text, 1) = "," Then KeyAscii = 0: Exit Sub  'если предыдущий символ "," то запрещаем ввод
            If iZap = 1 And InStr(1, .Text, Chr(45)) < 1 Then KeyAscii = 45: Exit Sub 'запятая уже есть, тире нет, то поставим тире
            If iZap >= 2 Then KeyAscii = 0  'в веденной строке больше двух запятых, запрещаем ввод
        Case 45
            If (Len(.Text) - Len(Replace(.Text, Chr(KeyAscii), ""))) >= 1 Then KeyAscii = 0 'если уже есть тире, то запрещаем ввод
        Case Else
           KeyAscii = 0'MsgBox("Можно вводить только цифры через запятую и тире", vbInformation, "Запрет ввода")
    End Select
  End With
End Sub
[/vba]

Автор - devilkurs
Дата добавления - 16.09.2016 в 16:02
parovoznik Дата: Суббота, 17.09.2016, 22:33 | Сообщение № 8
Группа: Проверенные
Ранг: Обитатель
Сообщений: 442
Репутация: 26 ±
Замечаний: 0% ±

Excel 2013
devilkurs, Boroda, спасибо оба варианта работают. hands
 
Ответить
Сообщениеdevilkurs, Boroda, спасибо оба варианта работают. hands

Автор - parovoznik
Дата добавления - 17.09.2016 в 22:33
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Проверка на ввод числового значения в текстбокс. (Макросы/Sub)
  • Страница 1 из 1
  • 1
Поиск:

Яндекс.Метрика Яндекс цитирования
© 2010-2024 · Дизайн: MichaelCH · Хостинг от uCoz · При использовании материалов сайта, ссылка на www.excelworld.ru обязательна!