如果有多个条件 vba,则无法让我的循环工作



我正在尝试纠正一个宏,该宏允许用户输入 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

应该够了。

最新更新