我目前正在在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真的返回一个字符串的问题?
如有疑问,请检查内置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
这里是一个办法赶上与对话互动的大部分成果;
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
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
。
注:以下内容仅适用于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
而不是从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`