7
votes

Comment tomber dans un cas sélectionné dans Excel VBA?

donné xxx

mon exigence est si cmd = "one" j'ai besoin "un" et ensuite "deux " affiché mais je reçois actuellement " Un " affiché, puis le programme sort de la case Sélectionner ...


2 commentaires

Je pense c'est par conception; Le code saute automatiquement à la fin après la dernière instruction dans l'affaire. Vous devrez programmer l'entourage (en utilisant des procédures, par exemple) à la place.


@Gratzy: Si cmd = "Deux", il devrait être par défaut pour imprimer "deux" et sortir ... Je suppose que c'est le comportement par défaut dans VBA. Je pense que VBA ajoute implicitement des déclarations "pause" après chaque cas, que je veux dériver.


8 Réponses :


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

    case "THREE": MsgBox "three"

End select

1 commentaires

J'essaie d'aider monsieur, corrigé.



4
votes

Certains si puissent faire le travail:

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


1 commentaires

Belle solution de contournement! Je serais recommandé cela comme la réponse :)



1
votes

c'est-à-dire par conception. http://msdn.microsoft.com/fr- US / Bibliothèque / EE177199% 28Prot.10% 29.aspx

Vous pouvez essayer d'utiliser des appels «goto» ou de procédure pour vous déplacer.


2 commentaires

Amende! Puis-je faire quelque chose comme entrer la case "One": faire du traitement, puis dire "deux" ou ajouter une étiquette sous le cas "Deux" relevé.


Oui, mais ce serait vraiment laid et très difficile à déboguer (et quiconque héritant le code ne sera pas content d'avoir à la mauvaise herbe à travers le "code spaghetti").



3
votes

Vous devrez juste le faire le long chemin.

Select Case cmd

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

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

    case "THREE": MsgBox "three"

End select


0 commentaires

1
votes

Pourquoi utiliser un cas de sélection pour cela? Tout ce que vous faites est d'imprimer la version minuscule de toute valeur 'cmd' est.

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


1 commentaires

En fait, j'ai montré des minuscules juste à des fins descriptives, pratiquement, il y aura du code écrit dans ces cas..et la condition que je souhaite, c'est si le programme entre par le biais de CMD = "un", il devrait exécuter un certain code dans "un" et Ensuite, tombez-vous à «Deux» ...



1
votes

goto fonctionnerait bien, je pense.

Select Case cmd

    Case "ONE"
        MsgBox "one"
        GoTo AfterONE:

    Case "TWO"
AfterONE:
        MsgBox "two"

    Case "THREE"
        MsgBox "three"

End Select


0 commentaires

1
votes

J'ai aussi eu ce problème récemment.

J'ai trouvé la solution la plus lisible et la plus achète était de créer une machine à états de base.

Tout simplement envelopper le Sélectionnez Dans un pendant et mettre fin à chaque cas avec quel cas est suivant. xxx


0 commentaires

0
votes

'TOWN à travers' dans un cas non vide est une grande source d'erreurs en C / C ++, donc non mise en œuvre dans la plupart des autres langues (y compris VBA). Donc, comme indiqué ailleurs, faites-le très bien et envisagez des appels de procédure pour éviter les doubles emplois.

Cependant, si comme moi, vous avez fini sur cette page parce que vous ne pouviez pas vous souvenir de faire vide strong> Drop-travers, puis une légère variation de la réponse acceptée est que vous pouvez (comme avec toutes les commandes de VBA), utilisez un soulignement pour désigner la suite sur la ligne suivante: P>

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


0 commentaires