给定
Select Case cmd
case "ONE": MsgBox "one"
case "TWO": MsgBox "two"
case "THREE": MsgBox "three"
End select
我的要求是如果cmd = "ONE"
我需要 "one"
然后"two"
显示,但是目前我正在"one"
显示,然后程序正在脱离选择案例......
给定
Select Case cmd
case "ONE": MsgBox "one"
case "TWO": MsgBox "two"
case "THREE": MsgBox "three"
End select
我的要求是如果cmd = "ONE"
我需要 "one"
然后"two"
显示,但是目前我正在"one"
显示,然后程序正在脱离选择案例......
Select Case cmd
case "ONE", "TWO":
if cmd = "ONE" THEN
MsgBox "one"
end if
MsgBox "two"
case "THREE": MsgBox "three"
End select
一些如果可以完成这项工作:
If cmd = "ONE" Then
MsgBox "one"
cmd = "TWO"
End If
If cmd = "TWO" Then
MsgBox "two"
cmd = "THREE"
End If
If Cmd = "THREE" Then
MsgBox "three"
End If
你只需要走很长的路。
Select Case cmd
case "ONE": MsgBox "one"
MsgBox "two"
MsgBox "three"
case "TWO": MsgBox "two"
MsgBox "three"
case "THREE": MsgBox "three"
End select
我发现最具可读性和可扩展性的解决方案是小型状态机。
只需将 a 包裹起来,Select
然后While
用下一个案例结束每个案例。
While cmd <> ""
Select Case cmd
Case "ONE"
MsgBox "one"
cmd = "TWO"
Case "TWO"
MsgBox "two"
cmd = ""
Case "THREE"
MsgBox "three"
cmd = ""
End Select
Wend
这是设计使然。http://msdn.microsoft.com/en-us/library/ee177199%28PROT.10%29.aspx
您可以尝试使用“goto”或过程调用来绕过它。
为什么要为此使用 Select Case?您所做的只是打印任何值 'cmd' 的小写版本。
If cmd = "ONE" Then
MsgBox LCase$(cmd)
MsgBox "two"
Else
Msgbox LCase$(cmd)
End If
我认为 GoTo 会很好用。
Select Case cmd
Case "ONE"
MsgBox "one"
GoTo AfterONE:
Case "TWO"
AfterONE:
MsgBox "two"
Case "THREE"
MsgBox "three"
End Select
有用; 我测试了它。
非空案例中的“失败”是 C/C++ 中错误的一大来源,因此在大多数其他语言(包括 VBA)中都没有实现。因此,如其他地方所述,请长期执行并考虑过程调用以避免重复。
但是,如果像我一样,您最终在此页面上是因为您不记得如何进行空直通,那么接受的答案的一个细微变化是您可以(与所有 VBA 的命令一样)使用下划线来表示继续到下一行:
Select Case cmd
Case "ONE", _
"TWO":
if cmd = "ONE" Then MsgBox "one"
MsgBox "two"
Case "THREE":
MsgBox "three"
End select