VBS循环简单的查询

问题描述:

HELO请帮助这是代码VBS循环简单的查询

Option Explicit 

Dim iim1, i, s , shell 
dim iret 
dim myname, mypath 
dim pos 


'initialize iMacros instance 
set iim1= CreateObject ("iMacros") 

'i = iim1.iimOpen ("-fx", false) 'Use open Firefox instance if available 
i = iim1.iimOpen ("-fx", true) 'Always open new instance 

pos = 2 

Do while pos < 10 

iret = iim1.iimSet("loopVar",Cstr(pos)) 
iret = iim1.iimPlay("ecc2.iim") 

set shell=createobject("wscript.shell") 
shell.Run "%comspec% /c C:\Users\SDFL\Desktop\dc1.bat" 

pos = pos + 1 
loop 

iret = iim1.iimPlay("ecc2.iim") 

我想它来检查iret < 0后。如果是的话,我希望它具有相同的Pos值在循环中重复步骤

iret = iim1.iimSet("loopVar",Cstr(pos)) 
iret = iim1.iimPlay("ecc2.iim") 

直到iret > 0,而不会干扰主循环,如果iret > 0我希望它移动到代码的下一行。

所以这是一个循环内循环如何做到这一点?请注意价值,例如Pos如果Pos的值为iret < 0时的值为6,则重复步骤pos = 6,如果iret > 0然后向前移动到下一行代码,则在最后一步pos = 7并且整个代码继续。

我希望你得到它

请给出代码感谢

ADDED

>>pos = 2 

iret = iim1.iimSet("loopVar",Cstr(pos)) 
iret = iim1.iimPlay("ecc2.iim") 

Do 

iret = iim1.iimSet("loopVar",Cstr(pos)) 
iret = iim1.iimPlay("ecc2.iim") 
iret = Rnd() > .5 
WScript.Echo pos, CStr(iret) 
Loop Until iret 


set shell=createobject("wscript.shell") 
shell.Run "%comspec% /c C:\Users\SDFL\Desktop\dc1.bat" 

pos = pos + 1 

如果你想要一个内环,只需添加一个内部循环:

pos = 2 

Do while pos < 10 
    Do 
    iret = iim1.iimSet("loopVar",Cstr(pos)) 
    iret = iim1.iimPlay("ecc2.iim") 
    Loop Until iret > 0 

    set shell=createobject("wscript.shell") 
    shell.Run "%comspec% /c C:\Users\SDFL\Desktop\dc1.bat" 

    pos = pos + 1 
loop 

当然,因为你的外循环只是迭代一系列数字,所以你最好使用For循环。而且我会在循环外部创建WScript.Shell对象,因此您不会浪费系统资源(重新)反复创建对象。

set shell=createobject("wscript.shell") 

For pos = 2 To 9 
    Do 
    iret = iim1.iimSet("loopVar",Cstr(pos)) 
    iret = iim1.iimPlay("ecc2.iim") 
    Loop Until iret > 0 

    shell.Run "%comspec% /c C:\Users\SDFL\Desktop\dc1.bat" 
Next 
+0

啊啊多数民众赞成在这谢谢你先生它的工作完美..谢谢你Ekkehard.Horner先生的帮助, – user2213626 2013-03-27 11:18:45

+0

先生1更简单的事情,我想问的内部循环是,它会无休止地循环,直到iret> 0,什么如果我想循环它只有5次不超过?代码是什么?意味着如果它在5次内循环/次后没有获得iret> 0,它应该继续到下一行代码?再次感谢您的回复,我很感谢您 – user2213626 2013-03-27 19:56:24

+0

添加一个计数器变量,您可以在内循环的每个循环中递增,并将条件更改为'iret> 0或计数器> 5'。 – 2013-03-27 20:41:29

首选遍历一个数值范围的方法是For,不While

>> For pos = 2 To 9 
>>  WScript.Echo "pos", pos 
>> Next 
>> 
pos 2 
pos 3 
pos 4 
pos 5 
pos 6 
pos 7 
pos 8 
pos 9 

要重复一个动作至少一次,直到某些条件fullfilled,使用Do ... Loop Until

>> For pos = 2 To 9 
>>  Do 
>>  ret = Rnd() > .5 
>>  WScript.Echo pos, CStr(ret) 
>>  Loop Until ret 
>> Next 
>> 
2 True 
3 True 
4 True 
5 False 
5 False 
5 True 
6 False 
6 True 
7 True 
8 True 
9 False 
9 False 
9 True 

有可能应该上限(?计数器/定时器)的Do环路aviod无尽的环圈。

加了:

在我的示例中,循环控制布尔变量ret设为True(=请停止循环)如果Rnd()返回一个值> 0.5的功能。给定一个函数.iimSet(),返回一些表示成功或失败的数字,你肯定可以自己计算出什么数字(..- 1,0,0 + 1 ..)来比较如何(=,<,>,< =>,= =)用该返回值在成功的情况下停止循环。提示:仔细检查你的测试 “IRET < 0” 与 “IRET> 0” WRT .iimSet()提供0

+0

谢谢主席先生的回复,但代码不与IRET = iim1.iimSet工作( “loopVar”,CSTR(POS)) IRET = iim1.iimPlay( “ecc2.iim”),你可以请提供这些代码,我是vbs的新手。这些都是imacros的脚本 – user2213626 2013-03-27 10:11:10

+0

好吧,先生用上面的代码尝试,并添加到第一篇文章, – user2213626 2013-03-27 10:56:18

+0

确定先生与上述代码尝试并添加到第一篇文章,代码工作1时间然后给弹出2真我点击确定,然后停止, ret返回值 - 933。我希望它继续不断弹出。在尝试这个工作时,我不得不从原始代码的最后一行中删除“循环”,所以现在请告诉代码除了二级ret循环之外还循环整个代码。谢谢你 – user2213626 2013-03-27 11:03:59