Проверка ввода десятичного числа. Допустимое число знаков после запятой устанавливается константой 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 |