2009-10-12 11 views
6

BiorącJak upaść przez Select Case w Excel VBA?

Select Case cmd 

    case "ONE": MsgBox "one" 

    case "TWO": MsgBox "two" 

    case "THREE": MsgBox "three" 

End select 

Moje wymogiem jest, jeśli cmd = "ONE" muszę "one" a następnie "two" wyświetlona jednak obecnie jestem coraz "one" wyświetlona, ​​a następnie program jest wyrwanie się z zaznaczonym przypadku ...

+0

co się stanie, jeśli cmd = "two"? – Gratzy

+0

Myślę, że jest to zgodne z projektem; kod automatycznie przeskakuje do końca po ostatnim stwierdzeniu w sprawie. Będziesz musiał programować wokół niego (używając na przykład procedur). –

+0

@ Gratzy: if cmd = "two" powinno domyślnie drukować "dwa" i wyrzucać ... Domyślam się, że jest to domyślne zachowanie w VBA. Myślę, że VBA domyślnie dodaje "break" po każdym przypadku, który ja chcesz ominąć. –

Odpowiedz

14
Select Case cmd 
    case "ONE", "TWO": 
        if cmd = "ONE" THEN 
         MsgBox "one" 
        end if 
        MsgBox "two" 

    case "THREE": MsgBox "three" 

End select 
+0

Zapamiętaj mój punkt wejścia w przypadku "ONE", który w tym przypadku nic nie wydrukuje ... –

+0

Próbuję pomóc sir, naprawiłem. – manji

+0

Niezły! ta składnia zadziałała dla mnie! :) –

3

Niektórzy mogą wykonać zadanie:

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 
+0

Ładne obejście! Poleciłbym to jako odpowiedź :) – seadoggie01

0

Zgodnie z projektem. http://msdn.microsoft.com/en-us/library/ee177199%28PROT.10%29.aspx

Możesz spróbować użyć wywołań "goto" lub procedur, aby ominąć to.

+0

Dobrze! czy mogę zrobić coś takiego, jak wpisać "ONE": wykonaj trochę przetwarzania, a następnie powiedz GOTO case "TWO" lub dodaj etykietę pod nazwą case "TWO". –

+1

Tak, ale byłoby naprawdę brzydko i bardzo trudno debugować (a każdy, kto odziedziczy kod, nie będzie zadowolony z konieczności przechodzenia przez "kod spaghetti"). –

2

Będziesz musiał to zrobić na dłuższą metę.

Select Case cmd 

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

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

    case "THREE": MsgBox "three" 

End select 
0

Po co używać Select Case do tego? Wszystko, co robisz, to drukowanie małymi literami dowolnej wartości "cmd".

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

Właściwie pokazałem małą literę tylko dla celów opisowych, praktycznie będzie kod napisany w tych przypadkach ... a warunkiem, że chcę, jest jeśli program wchodzi przez cmd = "ONE" powinien wykonać jakiś kod w "ONE" a następnie spaść z "na" DWIE "... –

0

GoTo będzie działać dobrze, tak myślę.

Select Case cmd 

    Case "ONE" 
     MsgBox "one" 
     GoTo AfterONE: 

    Case "TWO" 
AfterONE: 
     MsgBox "two" 

    Case "THREE" 
     MsgBox "three" 

End Select 

Działa; Testowałem to.