麻烦InputBoxes麻烦InputBoxes(Trouble with InputBoxes)

2019-05-12 05:40发布

我目前正在在MS Access VBA InputBoxes工作。 我检查验证和处理用户如何使用的InputBox通过按下确定或取消按钮交互。

纠正我,如果我错了,但InputBoxes可以返回任何数据类型,默认情况下返回一个字符串? 例如:

Dim userInputValue As String

'Text to display, Title, Default Value
userInputValue = InputBox("Please enter a #", "Determine Limit", 10000)

If userInputValue = "" Then
    MsgBox ("You pressed the cancel button...")
End If

如果用户按下取消按钮,这将运行良好。

但是,当我换这对于像这样一个整数值:

Dim userInputValue As Integer
'Text to display, Title, Default Value
userInputValue = InputBox("Please enter a #", "Determine Limit", 10000)

If userInputValue = 0 Then
    MsgBox ("You pressed the cancel button...")
End If

我收到一个Type Mismatch: Runtime Error '13'这是为什么? 当我调试的代码,并期待在返回什么我发现userInputValue居然是0,这就是我检查。 所以,是的的InputBox真的返回一个字符串的问题?

Answer 1:

如有疑问,请检查内置VBA帮助;)

InputBox()返回一个字符串

你可以尝试一下本作整数

Sub Sample()
    Dim Ret As String, userInputValue As Integer

    'Text to display, Title, Default Value
    Ret = InputBox("Please enter a #", "Determine Limit", 10000)

    If Ret = "" Then
        MsgBox ("You pressed the cancel button... or you pressed OK without entering anything")
    Else
        If IsNumeric(Ret) Then
            userInputValue = Val(Ret)
        Else
            MsgBox ("Incorrect Value")
        End If
    End If
End Sub


Answer 2:

这里是一个办法赶上与对话互动的大部分成果;

Dim value As String
value = InputBox("Please enter a #", "Determine Limit", 10000)

If (StrPtr(value) = 0) Then
    MsgBox "You pressed cancel or [X]"

ElseIf (value = "") Then
    MsgBox "You did not enter anything"

ElseIf (Val(value) = 0 And value <> "0") Then
    MsgBox "Invalid number"

Else
    MsgBox "You entered " & value

End If


Answer 3:

InputBox不管返回用户输入的数量的字符串。 如果他们点击取消,则返回一个空字符串。

在即时窗口,试试这个。

? TypeName(InputBox("Please enter a #", "Determine Limit", 10000))
String

对于你的代码测试,检查该数值相当于是否userInputValue等于零。

If Val(userInputValue) = 0 Then
    MsgBox ("You pressed the cancel button...")
End If

注比InputBox不允许你区分用户是否点击取消或删除初始值(10000),并点击OK。 无论哪种方式, InputBox返回一个空字符串(“”)。 和Val("")也返回零。 如果这将是一个问题,替换自定义表单来收集用户输入......这是不一样的限制为InputBox



Answer 4:

注:以下内容仅适用于Excel中。 该Application.InputBox功能不可用在Access:

如果用户点击取消返回Application.InputBox“假”。

Dim userInputString As String
Dim userInputValue As Integer
'Text to display, Title, Default Value
userInputString = Application.InputBox("Please enter a #", "Determine Limit", 10000)
If userInputString = "False" Then
    MsgBox ("You pressed the cancel button...")
Else
    userInputValue = CInt(Trim(userInputString))
End If


Answer 5:

而不是从InputString找回了一些回来,设置默认字符串为“___________”。 然后,我可以测试是否有任何被输入并取消”键将返回一个空字符串。

因为有时我想一个空字符串回我还添加了一个测试值“Allow_Empty_String”(真/假)。

该“Flag_Msg_Err”已经因为“Msg_Err”它设置为true,可以捕捉到环路的呼叫被重置为false。

该程序需要在3种一种方式响应:1.如果按下“取消”按钮,程序结束。 2.如果按下“确定”按钮后,如果ALLOW_EMPTY_STRING则消息,并给出再次输入ELSE开始的空字符串返回IF 3.已输入的字符串结束,然后TRIM(STRING)返回。

码:

`功能Input_String(PROG,消息,可选Allow_Empty_String =假) '返回一个字符串或单词“Cancal'“。 “19年2月28日创建。 WML

If Trace Then Prog = Prog & "(*)"
Call Name_Put("Flag_Msg_Err", False)

Do
    Test_String = "_____________"
    Input_String = InputBox(Prompt:=Message, _
                            Default:=Test_String, Title:=Prog)

    Select Case Input_String

        Case "TRACE"
            ' for Debugging
            Old_Trace = Named("Flag_Trace")
            New_Trace = Not Old_Trace
            Call Name_Put("Flag_Trace", New_Trace)
            Msg = "TRACE is now set to " & New_Trace & "."
            Call Name_Put("Flag_Msg_Err", False)

        Case Test_String
            If Allow_Empty_String Then
                Msg = "You must enter something,|" & _
                      " or select CANCEL."
                Call Msg_Err(Prog, Msg, , True)
                Call Name_Put("Flag_Msg_Err", False)
            Else
                Input_String = ""
                Finished = True
            End If

        Case ""
            If Trace Then
               Stop: Exit Function
            Else
               End
            End

        Case Else
            ' If entered a space or clicked "Ok".
            Input_String = Trim(Input_String)
            Finished = True

    End Select

 Loop

端功能“Input_String`



文章来源: Trouble with InputBoxes