我正在尝试纠正一个宏,该宏允许用户输入 1、2 或 3,并返回一条消息,告诉用户他们选择了什么数字。如果用户输入 1、2 或 3 以外的任何内容,我希望弹出一条错误消息,然后再次要求用户输入 1、2 或 3。我遇到的问题是,如果我在其中放置超过 1 个条件,我就无法让循环工作。这是我的代码
Public Sub ForecastReport()
Dim sinput As Integer
Do
sinput = Application.InputBox("Please select 1 to 3 " & vbLf & vbLf & "1. GB IMCP" & vbLf & "2. IE IMCP" & vbLf & "3. US", "Enter a Value")
Select Case sinput
Case 1
MsgBox ("you have selected GB IMCP")
Case 2
MsgBox ("you have selected IE IMCP")
Case 3
MsgBox ("you have selected US")
Case Else
MsgBox ("wrong input")
End Select
Loop Until sinput <> 3
End Sub
谢谢
为了简单起见,我经常只使用布尔切换来处理何时应该退出这样的循环。这还会处理输入框返回 false 的情况,因为用户已单击取消。下面您可以看到我是如何为一个输入框执行此操作的,我希望它返回的值是 2000 年到 2050 年之间的年份(år = 年)。Usine InputBox type:=1 使输入框只接受整数,这在您的情况下也很有用。
Dim år As Variant
Dim gyldigVerdi As Boolean
Do
år = Application.InputBox(Prompt:="Question", Title:="Title", Default:=Year(Date) + 1, Type:=1)
If Not CBool(år) Then
Exit Sub
ElseIf CLng(år) < 2000 Or CLng(år) > 2050 Then
MsgBox Prompt:="Error-message", Buttons:=vbExclamation, Title:="Title"
gyldigVerdi = False
Else
gyldigVerdi = True
End If
Loop Until gyldigVerdi
请注意,我使用Application.InputBox
而不是通用的VBA InputBox
- 对于两者之间的一些差异,您可以查看此页面。
如果您只对值介于 1 和 3 之间的比较感兴趣,请查看第一个ElseIf
的条件,并使用相反的值(x>= 1 和 x <= 3)。
尝试如下:
Loop Until sinput <= 3 And sinput > 0
应该够了。