在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或更大的数字,并显示错误消息并重新提示用户,直到发生这种情况。
提前感谢您的帮助!
答案 0 :(得分:1)
对您的代码进行了一些更改:
您可能还想考虑允许用户使用输入框中的取消选项。这将返回一个空字符串,因为如果他们点击取消并且不断被告知输入一个数字,它会让用户感到困惑和烦恼。在这种情况下,您可以返回默认值,具体取决于您需要如何使用此函数。
此外,此功能目前允许用户输入整数和小数,大概这就是你需要的。为您的函数(以及它们的参数)使用特定类型是个好主意,因此将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