VBA Excel Do While 循环运行时错误
VBA Excel Do While Loop Runtime Error
在 excel 中使用 VBA 编码非常新,我想做的是有一个 Do While 循环,它接受用户输入,如果它不是数字或小于 0 returns 一条错误消息并重新提示用户输入一个值,直到它满足先决条件。我尝试过以几种方式执行此操作,但似乎无法弄清楚其背后的具体细节。我的代码目前看起来像:
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 或更大的数字,并显示错误消息并重新提示用户直到发生这种情况。
在此先感谢您的帮助!
对您的代码进行了一些更改:
- 使用 IsNumeric 函数对循环中的值进行 Or'ed 测试:Val 函数会将任何非数字值转换为零,因此此语句允许您检查用户是否输入了数字以及是否输入了数字是零还是以上。
- 修改了消息,让用户清楚地知道任何小于零的值都是无效的,以前他们可能输入负数并被告知他们根本没有输入数字。
- 我也在转换后 return 编辑了值,之前你不是从函数中 return 编辑它。
您可能还想考虑允许用户使用输入框中的取消选项。这将 return 一个空字符串,如果用户点击取消并不断被告知输入一个数字,那么这会让用户感到困惑和厌烦。在这种情况下,您可以 return 一个默认值,这取决于您需要如何使用此功能。
此外,此功能目前允许用户输入整数和小数,想必这就是您所需要的。为您的函数(以及它们的参数)使用特定类型是个好主意,因此将 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
在 excel 中使用 VBA 编码非常新,我想做的是有一个 Do While 循环,它接受用户输入,如果它不是数字或小于 0 returns 一条错误消息并重新提示用户输入一个值,直到它满足先决条件。我尝试过以几种方式执行此操作,但似乎无法弄清楚其背后的具体细节。我的代码目前看起来像:
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 或更大的数字,并显示错误消息并重新提示用户直到发生这种情况。
在此先感谢您的帮助!
对您的代码进行了一些更改:
- 使用 IsNumeric 函数对循环中的值进行 Or'ed 测试:Val 函数会将任何非数字值转换为零,因此此语句允许您检查用户是否输入了数字以及是否输入了数字是零还是以上。
- 修改了消息,让用户清楚地知道任何小于零的值都是无效的,以前他们可能输入负数并被告知他们根本没有输入数字。
- 我也在转换后 return 编辑了值,之前你不是从函数中 return 编辑它。
您可能还想考虑允许用户使用输入框中的取消选项。这将 return 一个空字符串,如果用户点击取消并不断被告知输入一个数字,那么这会让用户感到困惑和厌烦。在这种情况下,您可以 return 一个默认值,这取决于您需要如何使用此功能。
此外,此功能目前允许用户输入整数和小数,想必这就是您所需要的。为您的函数(以及它们的参数)使用特定类型是个好主意,因此将 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