2009-10-12 12 views
6

DatoCome passare attraverso un Select Case in Excel VBA?

Select Case cmd 

    case "ONE": MsgBox "one" 

    case "TWO": MsgBox "two" 

    case "THREE": MsgBox "three" 

End select 

mia esigenza è se cmd = "ONE" ho bisogno "one" e poi "two" visualizzato però attualmente sto ottenendo "one" visualizzato e quindi il programma sta uscendo del caso select ...

+0

cosa succede se cmd = "due"? – Gratzy

+0

I _think_ è di progettazione; il codice salta automaticamente alla fine dopo l'ultima istruzione nel caso. Dovrai programmare attorno ad esso (usando, per esempio, le procedure). –

+0

@Gratzy: se cmd = "due" deve essere impostato in modo predefinito per stampare "due" e scoppiare ... Immagino che questo sia il comportamento predefinito in VBA .. Penso che VBA aggiunga implicitamente delle istruzioni "break" dopo ogni caso, che io voglio bypassare. –

risposta

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

    case "THREE": MsgBox "three" 

End select 
+0

Ricorda il mio punto di ingresso nel caso "UNO" che in questo caso non stamperà nulla ... –

+0

sto cercando di aiutare il signore, risolto. – manji

+0

Bello! quella sintassi ha funzionato per me! :) –

3

Alcuni se potevano fare il lavoro:

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

Bel trucco! Lo raccomanderei come risposta :) – seadoggie01

0

Questo è di progettazione. http://msdn.microsoft.com/en-us/library/ee177199%28PROT.10%29.aspx

Si potrebbe provare a utilizzare 'goto' o le chiamate di procedura per aggirare il problema.

+0

Bene! posso fare qualcosa come inserire il caso "ONE": fare un po 'di elaborazione e quindi dire il caso GOTO "TWO" o aggiungere qualche etichetta sotto la dichiarazione caso "TWO". –

+1

Sì, ma sarebbe davvero brutto e molto difficile da eseguire il debug (e chiunque erediti il ​​codice non sarà contento di dover sfogliare "codice spaghetti"). –

2

Devi solo farlo a lungo.

Select Case cmd 

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

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

    case "THREE": MsgBox "three" 

End select 
0

Perché utilizzare Seleziona caso per questo? Tutto quello che stai facendo è stampare la versione minuscola di qualunque valore 'cmd' sia.

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

In realtà ho mostrato lettere minuscole solo per scopi descrittivi, praticamente ci sarà il codice scritto in questi casi..e la condizione che voglio è se il programma passa attraverso cmd = "UNO" dovrebbe eseguire qualche codice in "UNO" e poi cadere tra "DUE" ... –

0

GoTo avrebbe funzionato bene, credo.

Select Case cmd 

    Case "ONE" 
     MsgBox "one" 
     GoTo AfterONE: 

    Case "TWO" 
AfterONE: 
     MsgBox "two" 

    Case "THREE" 
     MsgBox "three" 

End Select 

Funziona; L'ho provato