一个while循环,它检查输入字符串中的点或逗号是否正常,我想:
Sub TestMe()
Dim inputString As String
Dim inputNumeric As Boolean
inputString = InputBox("Please,enter a number!")
inputNumeric = isNumeric(Evaluate(inputString))
Do While InStr(1,inputString,".") Or _
InStr(1,",") Or _
Not inputNumeric
If Not CBool(inputNumeric) Then
MsgBox "You tried to cancel or entered empty value!"
Exit Do
End If
MsgBox "Please,do not write dot or comma!"
inputString = InputBox("Please,enter a number!")
inputNumeric = isNumeric(Evaluate(inputString))
Loop
End Sub
isNumeric()
检查输入是否可以转换为数字。因此5-1/2
应该没问题。
关于取消交易或从InputBox()
输入空值-这实际上取决于“应用程序”的业务逻辑,但是在上述情况下-存在msgbox并退出循环。
,
编写一个负责该提示的单独功能,并使用它,例如像这样:
Dim casingSize As String
If GetCasingSize(casingSize) Then
ActiveSheet.Range("C2").Value = casingSize
End If
该函数需要返回一个Boolean
才能起作用-如果输入有效,则返回True
,如果没有有效的输入(例如,取消提示,则返回False
) )。使这项工作有效的原因是,将结果作为ByRef
参数传递,如下所示:
Public Function GetCasingSize(ByRef outResult As String) As Boolean
Do
Dim raw As Variant
raw = InputBox("Casing size?")
If VarType(raw) = vbBoolean Then
'handle cancelled prompt:
Exit Do
End If
If ValidateFractional(raw) Then
'handle valid input:
outResult = CStr(raw)
GetCasingSize = True
Exit Do
End If
'handle invalid input:
If MsgBox("The value '" & raw & "' is not valid. Try again?",vbYesNo) = vbNo Then
Exit Do
End If
Loop
End Function
请注意,ValidateFractional
函数是其自身的问题-一个单独的Private
函数可以使用,但是我建议将其设为Public
和unit-testing it以确保在各种边缘情况输入的情况下,它可以按预期方式工作-并且将其包含在单独的函数中,意味着如果需要微调验证,则GetCasingSize
中的逻辑不需要更改;例如,该幼稚的实现使用Like
运算符,并且可以用于5-1/4
,但不适用于例如15-5/8
:
Public Function ValidateFractional(ByVal value As String) As Boolean
ValidateFractional = value Like "#[-]#/#"
End Function
为此使用正则表达式可能是个好主意。
本文链接:https://www.f2er.com/3156518.html