为什么这个VBS代码跳过了第一个条件?

时间:2015-03-28 01:27:13

标签: vbscript

以下必须在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")

2 个答案:

答案 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(类型不匹配)。