2013-03-27 29 views
-1

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 

回答

0

如果你想要一個內環,只需添加一個內部循環:

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

0

首選遍歷一個數值範圍的方法是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