以下必须在qtp中工作,所以我不能使用WScript.Echo。以下代码必须使用输入框要求1到10之间的整数。如果没有输入,则必须发出消息" Aborted"。
如果还有其他内容输入,则必须说明问题是什么,然后再次询问该号码,直到我通过取消或不输入任何内容为止。我有以下代码,但看起来它正在跳过第一个条件并转到循环中的第一个其他代码:
Option Explicit
Dim vNum, sNum, nNum
Do
vNum = InputBox("Please enter an integer between 1 and 10 inclusive")
If IsEmpty(vNum) Then
msgbox("Aborted")
Exit Do
Else
sNum = Trim(vNum)
If "" = sNum Then
vNum=Inputbox("Empty string")
Else
If IsNumeric(sNum) Then
nNum = CDbl(sNum)
If nNum <> Fix(nNum) Then
vNum=inputbox("Not an Integer")
Else
If nNum < 1 Or nNum > 10 Then
vNum=inputbox ("Not in range")
Else
msgbox nNum,("number ok")
Exit Do
End If
End If
Else
vNum= inputbox ("Not a number")
End If
End If
End If
Loop
msgbox ("Done")
答案 0 :(得分:0)
每次都可以循环并更改指令信息:
Dim vNum, instruction
instruction = "Please enter an integer between 1 and 10 inclusive"
Do
vNum = InputBox(instruction)
If vNum = False Then
MsgBox "Aborted"
Exit Do
ElseIf CStr(Trim(vNum)) = "" Then
instruction = "Empty string"
ElseIf Not IsNumeric(vNum) Then
instruction = "Not an integer"
ElseIf IsNumeric(vNum) And vNum < 1 Or vNum > 10 Then
instruction = "Not in range"
ElseIf IsNumeric(vNum) And vNum > 0 And vNum < 11 Then
MsgBox "Number OK"
Exit Do
Else
instruction = "Invalid Entry"
End If
Loop
答案 1 :(得分:-1)
这就是帮助说的。
如果用户单击“确定”或按ENTER键,则InputBox函数将返回文本框中的内容。如果用户点击取消,该函数会返回一个零长度字符串(&#34;&#34;)。
所以你没有测试一个空的或零长度的字符串。它是一个有效的字符串,只是空的。
同样来自帮助VBS中Empty
的含义,与字符串中的内容无关。
清除强>
Empty
关键字用于表示 未初始化的变量值 。这与Null不同。
帮助不错。 InputBox返回零长度字符串,就像文档说的那样。
未初始化的变量HAS A VALUE(数字,日期和字符串)
0表示数字 1899年某个时候约会 字符串的零长度字符串(以及固定长度字符串的空格字符串)。
帮助不是技术参考
帮助是一个描述行为未实施的合同文档。与COM理念一样。
这被称为LET COERCION。为什么x=65:Msgbox x
有效。那里有两个变量。
来自VBA实施者指南
Empty Let-coercion的语义取决于目标的声明类型:Source
任何数字类型 - 结果为0.
Boolean - 结果为False。
日期 - 结果是12/30/1899 00:00:00。
String - 结果是一个0长度的字符串。
String * length - 结果是一个包含长度空格的字符串。
引发任何类或对象 - 运行时错误424(需要对象)。 -
除Variant之外的任何其他类型 - 引发运行时错误13(类型不匹配)。