我正试图找到一种方法来避免在VBA中使用GoTo循环,因为我知道它们会导致严重的混淆和问题。我有一个用户InputBox
,其中用户定义了一个变量,当前在if语句中有3个选项,if = Y ElseIf = N,否则GoTo Start。
然而,这对于用户错误输入变量即Y#等的情况非常有用,但是当用户想要关闭输入框,即点击取消或交叉时,我当前遇到了问题。
所以我想知道是否有更聪明的解决方案或我是否坚持这个打算?
我的代码如下,这只是一个测试集,用于测试我添加到主代码中的这个新功能。
Sub MsgBox_Test ()
Dim TestVariable As String
VariableEntrey: TestVariable = InputBox(" Y or N")
If TestVariable = "Y" Or TestVariable = "y" Then
MsgBox ("Yeyy")
ElseIf TestVariable = "N" Or TestVariable = "n" Then
MsgBox ("Awww")
Else: GoTo VariableEntrey
End If
End Sub
感谢您提供的任何帮助
答案 0 :(得分:3)
您可以尝试重复的Do... Loop Until
构造,直到您得到可接受的答案。例如:
Sub GetAnswer()
Dim strAnswer As String
Do
strAnswer = InputBox("Y or N")
Loop Until strAnswer Like "[YyNn]"
MsgBox "Thanks for your answer of: " & strAnswer
End Sub
请参阅Like
运算符上的文档,以防止必须单独检查y
,Y
,n
和N
。
答案 1 :(得分:1)
Option Explicit
Sub MsgBox_Test()
Dim TestVariable As String
Dim done As Boolean
Do
TestVariable = InputBox(" Y or N")
done = True ' preload exit value
If LCase(TestVariable) = "y" Then
MsgBox ("Yeyy")
ElseIf LCase(TestVariable) = "n" Then
MsgBox ("Awww")
ElseIf Len(TestVariable) > 0 Then
done = False ' abort exit
End If
Loop Until done
End Sub
答案 2 :(得分:0)
您可以在此处尝试Do .... Loop
:
编辑:加上单个字符或空输入的限制
Dim TestVariable As String
TestVariable = InputBox(" Y or N")
Do While (TestVariable = "N" Or TestVariable = "n" or Len(TestVariable) > 1)
MsgBox ("Awww")
TestVariable = InputBox(" Y or N")
Loop
If TestVariable = "Y" Or TestVariable = "y" Then
MsgBox ("Yeyy")
End if
答案 3 :(得分:0)
您可以使用Do
>> Loop Until
循环,以移除GoTo
。
此外,您可以使用UCase(TestVariable)
从Or
中删除If
。
Sub MsgBox_Test()
Dim TestVariable As String
Do
TestVariable = InputBox(" Y or N")
If UCase(TestVariable) = "Y" Then
MsgBox ("Yeyy")
ElseIf UCase(TestVariable) = "N" Then
MsgBox ("Awww")
End If
Loop Until UCase(TestVariable) Like "[YN]"
End Sub
答案 4 :(得分:0)