VBA输入框可防止小数

我正在尝试开发一种有助于标准化产品描述目录的工具。我想有一个输入框,提示用户输入尺寸。我想鼓励输入“ 5-1 / 2”之类的大小,并防止用户输入“ 5.5”。理想情况下,如果输入的大小是小数而不是带小数的破折号,我希望弹出一个消息框,说他们不能这样做。然后,需要重新显示输入框。

这就是我所拥有的-

Private Sub CS_Other_Click()
Unload Me
Sheets("Fill In").activate
Worksheets("Fill In").Range("C2").NumberFormat = "@"
Dim other_casing_size As Variant
other_casing_size = InputBox("Fill in the casing size. Syntax MUST be in the form of X-X/X","New Casing Size")
Range("C2") = other_casing_size

我只是不知道防止小数点输入的代码。更好的是,如果我知道如何编写确切的语法来包含或排除我想要的任何东西,那将是完美的。

谢谢

mm6yuz 回答:VBA输入框可防止小数

一个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函数可以使用,但是我建议将其设为Publicunit-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

大家都在问