繁体   English   中英

VBA Excel做While循环运行时错误

[英]VBA Excel Do While Loop Runtime Error


在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. 使用IsNumeric函数或对循环中的值进行测试:Val函数会将任何非数字值转换为零,因此此语句可让您检查用户是否输入了数字以及是否输入了零或更高。
  2. 修改了该消息,以使用户清楚地知道小于零的任何内容都是无效的,以前他们可以输入负数,并被告知根本没有输入数字。
  3. 转换后,我还返回了该值,以前您没有从函数中返回它。

您可能还需要考虑允许用户使用输入框中的“取消”选项。 这将返回一个空字符串,并且如果用户单击“取消”并不断被告知输入数字,那么这将使用户感到困惑和烦恼。 在这种情况下,您可能会返回默认值,具体取决于您需要如何使用此函数。

另外,该功能当前允许用户输入整数和小数,大概就是您所需要的。 为函数(及其参数)使用特定类型是个好主意,因此将As String添加到提示参数,或者将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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM