2016-09-30 3 views
0

Lorsque j'exécute l'extrait suivant et que j'entre une valeur acceptable, j'obtiens le résultat souhaité.Validation de la saisie utilisateur dans la zone de saisie

do while len(strselect) = 0 'or strselect<>"1" or strselect<>"2" or strselect<>"3" 
strselect = inputbox ("Please select:" &vbcrlf&vbcrlf&_ 
"1. Add an entry" &vbcrlf&vbcrlf&_ 
"2. Remove an entry" &vbcrlf&vbcrlf&_ 
"3. Search for an entry" &vbcrlf, "Contact Book") 
if isempty(strselect) then 
wscript.quit() 
elseif strselect="1" then 
wscript.echo "You chose 1" 
elseif strselect="2" then 
wscript.echo "You chose 2" 
elseif strselect="3" then 
wscript.echo "You chose 3" 
end if 
loop 

Toutefois, si j'essaie de limiter le processus de validation plus (en incluant la remarque dans les conditions do while), et lancez l'extrait à nouveau, je reçois le if état déclenché, mais correspondant de la boucle do continue, au lieu de sortir .

J'ai essayé d'utiliser isnumeric et cstr sur la boucle dostrselect conditions, sans joie ... Que suis-je manque pour obtenir la chose darn pour sortir de la boucle?

Répondre

0

Vous avez un problème avec la logique dans l'état

  condition 1   condition 2  condition 3  condition 4 
     v----------------v  v------------v v------------v v............v 
do while len(strselect) = 0 or strselect<>"1" or strselect<>"2" or strselect<>"3" 

En fonction de valeur à l'intérieur strSelect, vous avez

value c1  c2  c3  c4  
     len=0 <>"1" <>"2" <>"3" c1 or c2 or c3 or c4 
-------------------------------------- -------------------- 
empty true true true true   true 
    1  false false true true   true 
    2  false true false true   true 
    3  false true true false   true 
other false true true true   true 

Dans chaque ligne que vous avez au moins une condition évaluée comme true, et lorsque vous concaténez les conditions avec les opérateurs Or (évaluez la valeur true si au moins l'une des valeurs est vraie), la condition complète est évaluée comme étant vraie et le code continue à boucler

Vous avez seulement besoin de changer la condition

Do While strselect<>"1" And strselect<>"2" And strselect<>"3" 
Do While Not (strselect="1" Or strselect="2" Or strselect="3") 
.... 
+0

Merci beaucoup MC ND, réponse bien illustré. Mon erreur est aussi claire maintenant, car c'était frustrant indéterminable la nuit dernière. Je vais réviser mes opérateurs logiques, et ma logique! après la hâte ... merci encore! :) –