.Value
TextBox - это всегда String
, имя «TextBox» уже включает в себя то, что это «Text».Таким образом, он не может иметь тип Double
, если вы не возьмете это String
и не преобразуете его (неявное или явное) в Double
.
VarType(TextBox19.Value)
всегда будет возвращать vbString
, поскольку оно возвращает типпеременной, а не тип данных внутри переменной.
Таким образом, вам действительно нужно проверить, является ли она десятичной (не целой).
Единственный способ проверить это правильно -проверьте, содержит ли String
ровно один ,
(соответствующий .
в зависимости от вашей локализации).И затем проверьте, является ли он числовым (в противном случае он также принял бы a,b
).
Option Explicit
Public Sub TestForDecimalInput()
Dim DecimalValue As Double
Dim TextBoxValue As String
TextBoxValue = "9" 'just for testing get your text box value here: TextBoxValue = TextBox19.Value
'this replaces . and , with the actual decimal seperator of your operating system
'so the user is allowed to either enter `0,9` or `0.9`
TextBoxValue = Replace$(TextBoxValue, ".", Application.DecimalSeparator)
TextBoxValue = Replace$(TextBoxValue, ",", Application.DecimalSeparator)
'Check if there is exactly one! decimal seperator
If Len(TextBoxValue) = Len(Replace$(TextBoxValue, Application.DecimalSeparator, "")) + 1 Then
'we need to check for numeric too because yet it could be `a,b` too
If IsNumeric(TextBoxValue) Then
DecimalValue = CDbl(TextBoxValue)
End If
End If
If DecimalValue <> 0 Then
Debug.Print TextBoxValue, "->", DecimalValue
Else
Debug.Print TextBoxValue, "->", "Invalid Data"
End If
End Sub
Это будет результат некоторых примеров ввода
0.9 -> 0,9
09 -> Invalid Data
0,9 -> 0,9
0,9,0 -> Invalid Data
0,0 -> Invalid Data
9,0 -> 9
9 -> Invalid Data
Обратите внимание, что 9,0
будет принят в качестве ввода, но 9
будет недействительным в качестве ввода.