我正在尝试修改一个允许用户输入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
谢谢
答案 0 :(得分:0)
试试这样:
Loop Until sinput <= 3 And sinput > 0
应该就够了。
答案 1 :(得分:0)
为简单起见,我经常只使用布尔切换来处理何时应该退出这样的循环。这也处理inputbox返回false的情况,因为用户单击了cancel。下面你可以看到我是如何为输入框做的,我希望它返回的值是2000年到2050年之间的一年(år= year)。 Usine InputBox类型:= 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
- 对于两者之间的一些差异,您可以查看this page。
如果您只对比较感兴趣,如果值介于1和3之间将返回true,请查看第一个ElseIf
的条件,并使用相反的(x&gt; = 1并且x <= 3)。