【问题标题】:How to fall through a Select Case in Excel VBA?如何在 Excel VBA 中通过 Select Case?
【发布时间】:2010-12-06 03:04:09
【问题描述】:

给定

Select Case cmd

    case "ONE":   MsgBox "one"

    case "TWO":   MsgBox "two"

    case "THREE": MsgBox "three"

End select

我的要求是如果cmd = "ONE" 我需要"one" 然后显示"two" 但是目前我正在显示"one" 然后程序正在脱离选择情况...

【问题讨论】:

  • 认为这是设计使然;代码自动跳到 case 中最后一条语句之后的末尾。您必须围绕它进行编程(例如,通过使用过程)。
  • @Gratzy:如果 cmd = "two" 它应该默认打印 "two" 并中断...我想这是 VBA 中的默认行为。我认为 VBA 隐式添加了 "break"每个案例之后的语句,我想绕过。

标签: vba excel office-2007


【解决方案1】:
Select Case cmd
    case "ONE", "TWO":   
                  if cmd = "ONE" THEN
                      MsgBox "one"
                  end if
                  MsgBox "two"

    case "THREE": MsgBox "three"

End select

【讨论】:

  • 我正在努力帮助先生,已解决。
【解决方案2】:

如果可以完成这项工作:

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

【讨论】:

  • 不错的解决方法!我会推荐这个作为答案:)
【解决方案3】:

这是设计使然。 http://msdn.microsoft.com/en-us/library/ee177199%28PROT.10%29.aspx

您可以尝试使用“goto”或过程调用来绕过它。

【讨论】:

  • 很好!我可以做一些类似输入 case "ONE": 做一些处理然后说 GOTO case "TWO" 或者在 case "TWO" 语句下添加一些标签。
  • 是的,但它真的很丑而且很难调试(继承代码的任何人都不会高兴不得不通过“意大利面条代码”来清除)。
【解决方案4】:

你只需要走很长的路。

Select Case cmd

    case "ONE":   MsgBox "one"
                  MsgBox "two"
                  MsgBox "three"

    case "TWO":   MsgBox "two"
                  MsgBox "three"

    case "THREE": MsgBox "three"

End select

【讨论】:

    【解决方案5】:

    为什么要为此使用 Select Case?您所做的只是打印任何值 'cmd' 的小写版本。

    If cmd = "ONE" Then
      MsgBox LCase$(cmd)
      MsgBox "two"
    Else
      Msgbox LCase$(cmd)
    End If
    

    【讨论】:

    • 实际上我显示小写只是为了描述的目的,实际上会有在这些情况下编写的代码..我想要的条件是如果程序通过 cmd = "ONE" 进入它应该在“ONE”中执行一些代码,然后通过“TWO”...
    【解决方案6】:

    我认为 GoTo 会很好用。

    Select Case cmd
    
        Case "ONE"
            MsgBox "one"
            GoTo AfterONE:
    
        Case "TWO"
    AfterONE:
            MsgBox "two"
    
        Case "THREE"
            MsgBox "three"
    
    End Select
    

    有效;我测试过了。

    【讨论】:

      【解决方案7】:

      我发现最易读和可扩展的解决方案是小型状态机。

      只需将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
      

      【讨论】:

        【解决方案8】:

        非空案例中的“失败”是 C/C++ 中错误的一大来源,因此在大多数其他语言(包括 VBA)中都没有实现。因此,如其他地方所述,请长期执行并考虑过程调用以避免重复。

        但是,如果您像我一样最终进入此页面,因为您不记得如何进行 empty 直通,那么接受的答案略有不同是您可以(如所有 VBA 的命令)使用下划线表示继续到下一行:

        Select Case cmd
        Case "ONE", _
             "TWO":   
            if cmd = "ONE" Then MsgBox "one"
            MsgBox "two"
        Case "THREE":
            MsgBox "three"
        End select
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2021-01-24
          • 2017-12-16
          • 2021-08-20
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多