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
首选遍历一个数值范围的方法是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
谢谢主席先生的回复,但代码不与IRET = iim1.iimSet工作( “loopVar”,CSTR(POS)) IRET = iim1.iimPlay( “ecc2.iim”),你可以请提供这些代码,我是vbs的新手。这些都是imacros的脚本 – user2213626 2013-03-27 10:11:10
好吧,先生用上面的代码尝试,并添加到第一篇文章, – user2213626 2013-03-27 10:56:18
确定先生与上述代码尝试并添加到第一篇文章,代码工作1时间然后给弹出2真我点击确定,然后停止, ret返回值 - 933。我希望它继续不断弹出。在尝试这个工作时,我不得不从原始代码的最后一行中删除“循环”,所以现在请告诉代码除了二级ret循环之外还循环整个代码。谢谢你 – user2213626 2013-03-27 11:03:59
啊啊多数民众赞成在这谢谢你先生它的工作完美..谢谢你Ekkehard.Horner先生的帮助, – user2213626 2013-03-27 11:18:45
先生1更简单的事情,我想问的内部循环是,它会无休止地循环,直到iret> 0,什么如果我想循环它只有5次不超过?代码是什么?意味着如果它在5次内循环/次后没有获得iret> 0,它应该继续到下一行代码?再次感谢您的回复,我很感谢您 – user2213626 2013-03-27 19:56:24
添加一个计数器变量,您可以在内循环的每个循环中递增,并将条件更改为'iret> 0或计数器> 5'。 – 2013-03-27 20:41:29