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

Вход

Регистрация

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

 

= Мир MS Excel/Готовые решения

МЕНЮ САЙТА
  • 1
  • 2
  • 3

КАТЕГОРИИ РАЗДЕЛА

ОПРОСЫ
Какой версией Excel Вы пользуетесь?
Всего ответов: 57669
Главная » Готовые решения » VBA » Процедуры

Проверка корректности ввода в TextBox
16.04.2016, 16:17
[ Файл-пример (14.0 Kb) ]

Две процедуры, проверяющие, введено ли в TextBox целое или десятичное число. При вставке из буфера обмена урезают ставленное справа до числа, при вводе с клавиатуры — создают ощущение "отключения" "запрещённых" клавиш. Точка и запятая автоматически заменяются установленным в настройках десятичным разделителем.

Проверка ввода десятичного числа. Допустимое число знаков после запятой устанавливается константой Prec (в данном примере — 3). Ввод числа с нулевой целой частью может начинаться прямо с десятичного разделителя

Private Sub txt_Decimal_Change()

Dim vl As String, DecSep As String
Const Prec As Integer = 3

vl = IIf(Trim(Me.txt_Decimal.Value) = "." Or Trim(Me.txt_Decimal.Value) = ",", 0 & Application.DecimalSeparator, Trim(Me.txt_Decimal.Value))
Do While Not IsNumeric(vl) And vl <> ""
vl = Left(vl, Len(vl) - 1)
Loop
DecSep = IIf(InStr(1, vl, ".", vbTextCompare) = 0, IIf(InStr(1, vl, ",", vbTextCompare) = 0, "", ","), ".")
vl = IIf(DecSep = "", vl, Replace(vl, DecSep, Application.DecimalSeparator, 1, -1, vbTextCompare))
vl = IIf(DecSep <> "" And Len(vl) - InStr(1, vl, Application.DecimalSeparator, vbTextCompare) > Prec, Left(vl, InStr(1, vl, Application.DecimalSeparator, vbTextCompare) + Prec), vl) 'Закомментируйте эту строку, чтобы снять ограничение на число знаков после запятой
Me.txt_Decimal.Value = vl

End Sub

Проверка ввода целого числа. Допустимое число знаков устанавливается константой Prec (в данном примере — 4).

Private Sub txt_Integer_Change()

Dim vl As String
Dim DecSep As Integer
Const Prec As Integer = 4

vl = Trim(Me.txt_Integer.Value)
Do While Not IsNumeric(vl) And vl <> ""
vl = Left(vl, Len(vl) - 1)
Loop
DecSep = IIf(InStr(1, vl, ".", vbTextCompare) = 0, InStr(1, vl, ",", vbTextCompare), InStr(1, vl, ".", vbTextCompare))
vl = IIf(DecSep = 0, vl, Left(vl, DecSep - 1))
vl = IIf(Len(vl) > Prec, Left(vl, Prec), vl) 'Закомментируйте эту строку, чтобы снять ограничение на число знаков
Me.txt_Integer.Value = vl

End Sub

Добавил: StoTisteg |
Просмотров: 5899 | Рейтинг: 3.8/4
Всего комментариев: 1
0   Спам
1    66fesh   (09.05.2024 09:21) [ Материал]
   Для Private Sub txt_Integer_Change() vl = IIf(DecSep = 0, vl, Left(vl, DecSep - 1)) при вводе первой цифры выдает ошибку "Неверный аргумент",т.к DecSep=0, соответственно Left(vl, DecSep - 1) =Left(vl, 0 - 1)

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