Как провалиться в Select Case в Excel VBA? - PullRequest
6 голосов
/ 13 октября 2009

С учетом

Select Case cmd

    case "ONE":   MsgBox "one"

    case "TWO":   MsgBox "two"

    case "THREE": MsgBox "three"

End select

Мое требование: если cmd = "ONE" мне нужно "one", а затем отображается "two", но в настоящее время отображается "one", а затем программа выходит из режима выбора ...

Ответы [ 7 ]

15 голосов
/ 13 октября 2009
Select Case cmd
    case "ONE", "TWO":   
                  if cmd = "ONE" THEN
                      MsgBox "one"
                  end if
                  MsgBox "two"

    case "THREE": MsgBox "three"

End select
3 голосов
/ 13 октября 2009

Некоторые, если могли бы сделать работу:

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
2 голосов
/ 13 октября 2009

Тебе просто придется проделать долгий путь.

Select Case cmd

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

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

    case "THREE": MsgBox "three"

End select
0 голосов
/ 18 марта 2018

У меня тоже недавно была эта проблема.

Я обнаружил, что наиболее читаемым и масштабируемым решением было создание базового автомата.

Просто оберните 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
0 голосов
/ 20 сентября 2017

GoTo будет хорошо работать, я думаю.

Select Case cmd

    Case "ONE"
        MsgBox "one"
        GoTo AfterONE:

    Case "TWO"
AfterONE:
        MsgBox "two"

    Case "THREE"
        MsgBox "three"

End Select

Работает; Я проверял это.

0 голосов
/ 15 октября 2009

Зачем использовать Select Case для этого? Все, что вы делаете, это печатаете строчную версию любого значения 'cmd'.

If cmd = "ONE" Then
  MsgBox LCase$(cmd)
  MsgBox "two"
Else
  Msgbox LCase$(cmd)
End If
0 голосов
/ 13 октября 2009

То есть по замыслу. http://msdn.microsoft.com/en-us/library/ee177199%28PROT.10%29.aspx

Вы можете попробовать использовать 'goto' или вызовы процедур, чтобы обойти это.

...