VBA Excel执行循环运行时错误

时间:2015-10-21 04:06:58

标签: vba excel-vba runtime-error do-while excel


在excel中使用VBA编码非常新,我尝试做的是有一个Do While循环,它接受用户输入,如果它不是数字或小于0,则返回错误消息并重新提示用户输入一个值,直到它达到先决条件。我曾尝试过以某种方式做到这一点,但似乎无法弄清楚背后的具体细节。我的代码目前看起来像:

Function getQuantity(prompt)

Dim quantity As String

quantity = InputBox(prompt)

Do While quantity < 0
    If Not IsNumeric(quantity) Then
        MsgBox ("Incorrect Value, Numbers Only Please!")
        quantity = InputBox(prompt)
    End If
Loop

End Function

如果这样写,我会收到运行时错误。

如果我只是使用:

Function getQuantity(prompt)

Dim quantity As String

quantity = InputBox(prompt)

 If Not IsNumeric(quantity) Then
        MsgBox ("Incorrect Value, Numbers Only Please!")
        quantity = InputBox(prompt)
 End If

End Function

这个,它做我想要的,除了它只在继续之前重新提示一次,因为它不在循环中。基本上我希望它循环,直到它得到0或更大的数字,并显示错误消息并重新提示用户,直到发生这种情况。

提前感谢您的帮助!

1 个答案:

答案 0 :(得分:1)

对您的代码进行了一些更改:

  1. 使用IsNumeric函数或者对循环中的值进行测试:Val函数将任何非数字值转换为零,因此该语句允许您检查用户是否输入了数字,如果是是零或以上。
  2. 修改了该消息,告知用户任何小于零的内容都不是有效的,以前他们可能输入了一个负数并被告知他们根本没有输入任何数字。
  3. 转换后我还返回了值,之前你还没有从函数中返回它。
  4. 您可能还想考虑允许用户使用输入框中的取消选项。这将返回一个空字符串,因为如果他们点击取消并且不断被告知输入一个数字,它会让用户感到困惑和烦恼。在这种情况下,您可以返回默认值,具体取决于您需要如何使用此函数。

    此外,此功能目前允许用户输入整数和小数,大概这就是你需要的。为您的函数(以及它们的参数)使用特定类型是个好主意,因此将As String添加到prompt参数中,或者将As Double添加到函数中会使代码更清晰,并为您提供更多的编译时间安全性。

    Function getQuantity(prompt)
    
    Dim quantity As String
    quantity = InputBox(prompt)
    
    Do While Not IsNumeric(quantity) Or Val(quantity) < 0
        MsgBox ("Incorrect value, please enter a valid number of zero or above")
        quantity = InputBox(prompt)
    Loop
    
    getQuantity = Val(quantity)
    
    End Function