2009-10-12 12 views
6

Dado¿Cómo pasar por un caso selecto en Excel VBA?

Select Case cmd 

    case "ONE": MsgBox "one" 

    case "TWO": MsgBox "two" 

    case "THREE": MsgBox "three" 

End select 

Mi requisito es si cmd = "ONE" necesito "one" y luego "two" exhibidas sin embargo actualmente estoy recibiendo "one" muestra y luego el programa está saliendo de la caja de selección ...

+0

¿Qué ocurre si cmd = "two"? – Gratzy

+0

Creo que eso es por diseño; el código salta automáticamente al final después de la última declaración en el caso. Tendrás que programar alrededor (usando procedimientos, por ejemplo) en su lugar. –

+0

@Gratzy: si cmd = "two" debería imprimirse "dos" por defecto y salir ... Supongo que este es el comportamiento predeterminado en VBA ... Creo que VBA agrega implícitamente sentencias "break" después de cada caso, que querer pasar por alto. –

Respuesta

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

    case "THREE": MsgBox "three" 

End select 
+0

Recuerda mi punto de entrada en el caso "ONE" que en este caso no imprimirá nada ... –

+0

Estoy tratando de ayudar señor, corregido. – manji

+0

¡Bonito! ¡esa sintaxis funcionó para mí! :) –

3

Algunos podrían hacer el trabajo:

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

¡Buena solución! Recomendaría esto como la respuesta :) – seadoggie01

0

Eso es por diseño. http://msdn.microsoft.com/en-us/library/ee177199%28PROT.10%29.aspx

Podría intentar usar 'goto' o llamadas a procedimientos para evitarlo.

+0

¡Bien! ¿Puedo hacer algo así como ingresar el caso "ONE": hacer un procesamiento y luego decir GOTO caso "DOS" o agregar alguna etiqueta en el caso "DOS" declaración. –

+1

Sí, pero sería muy feo y muy difícil de depurar (y cualquiera que herede el código no estará contento de tener que eliminar el "código de spaghetti"). –

2

Tendrás que hacerlo por el camino largo.

Select Case cmd 

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

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

    case "THREE": MsgBox "three" 

End select 
0

¿Por qué usar Select Case para esto? Todo lo que está haciendo es imprimir la versión en minúscula de cualquier valor 'cmd'.

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

En realidad, he mostrado minúsculas solo para fines descriptivos, prácticamente habrá código escrito en esos casos ... y la condición que deseo es que si el programa ingresa a través de cmd = "ONE" debería ejecutar algún código en "ONE" y luego caer a 'DOS' ... –

0

GoTo funcionaría bien, creo.

Select Case cmd 

    Case "ONE" 
     MsgBox "one" 
     GoTo AfterONE: 

    Case "TWO" 
AfterONE: 
     MsgBox "two" 

    Case "THREE" 
     MsgBox "three" 

End Select 

Funciona; Lo probé