所以......我已经有一段时间了,但我肯定还是很可怕。
总结:
我想在点击某些guis中的特定选项后开始循环的下一次迭代。
在我的研究中,我发现你不能在循环中获得任何回报。问题是我不知道如何在没有回报的情况下完成这项工作。
请帮助!
谢谢,
Marc S
(TRIMMED!)
` 起始线:= 5
Loop, 10
{
CurrentRow := (StartLine - 1) + A_Index ;*****
;----------------***GETTING THE DATA***----------------
ControlFocus,, Proto_Names - Excel
Sleep, 200
oNamesDoc := ComObjActive("Excel.Application")
Global AlertStatus := oNamesDoc.Range("C" CurrentRow).Text
Global AlertQualifier := oNamesDoc.Range("D" CurrentRow).text
Global First := oNamesDoc.Range("H" CurrentRow).text
Global Last := oNamesDoc.Range("I" CurrentRow).text
Global State := oNamesDoc.Range("J" CurrentRow).text
Global Type := oNamesDoc.Range("M" CurrentRow).text
Global HMSStatus := oNamesDoc.Range("P" CurrentRow).text
Global HMSQualifier := oNamesDoc.Range("Q" CurrentRow).text
Global LicenseNo := oNamesDoc.Range("N" CurrentRow).text
Global Scrubbed := oNamesDoc.Range("AB" CurrentRow).value
;----------------***GETTING THE DATA***----------------
;Gui
Gui, 2:Add, Text,x1 y8, Blah Blah
Gui, 2:Add, Button, x1 y40, License
Gui, 2:Add, Button, x80 y40, Name
Gui, 2:Show, , blah blah - Row %CurrentRow% ; Important because it references A_Index
return
2GuiClose:
Gui, 2:Destroy
return
2ButtonLicense:
Gui, 2:Submit
Gui, 2:Destroy
;Another GUI
Gui, 3:Add, Text,x1 y8, Text
Gui, 3:Add, Text,x170 y132, Row %CurrentRow% ;Important because it references A_index
Gui, 3:Add, Button,x1 y125 , blah
Gui, 3:Show, , blah blah
return
3GuiClose:
Gui, 3:Destroy
return
3ButtonAgree:
Gui, 3:Submit
Gui, 3:Destroy
MsgBox, Click OK for Next
continue
}
`
进一步总结:
目标: 循环以下内容: 1. Gui#1:选项a |选项b 也想显示A_Index
如果选择了选项A或B,请转到Gui#2
如果选项c,从gui 1开始下一次循环迭代。
如果选项d,请转到Gui#3
如果选择了任何选项,我想更新一个xslx文件(我可以计算出该部分),然后开始循环的下一次迭代。
答案 0 :(得分:0)
The documentation for Loop
建议您可以使用break
提前退出循环。这是你想要通过回报实现的目标吗?
你可以设置一个返回变量,中断并返回那个?
澄清后编辑:
我认为最好的方法是将每个gui作为一个函数分开,只运行你在这里使用的循环。
有一个主循环和一个全局变量,说明要输入的下一个循环是什么 然后每个函数都可以设置这个变量。
global NextLoop:=1
main(){
global NextLoop
loop{
if NextLoop == 1 {
gui1()
}else if NextLoop == 2 {
gui2()
} ; etc...
}
}
gui1(){
global NextLoop
loop{
if ; user chooses an option {
NextLoop := 2
return
}
}
}
gui2(){
global NextLoop
loop{
if ; user chooses c {
NextLoop := 1
return
}
if ; user chooses d {
NextLoop := 3
return
}
}
}
}
填写该代码,它应该有效。
答案 1 :(得分:0)
感谢您的建议,但我想我已经弄清楚了。看看下面的代码,我会尝试回答任何问题。它真漂亮......
LoopTot := (Endline - StartLine) + 1
Loop, %LoopTot% ;***Starts the loop***
{
Global CurrentRow := (StartLine - 1) + A_Index
;----------------***GETTING THE DATA***----------------
ControlFocus,, Proto_Names - Excel
Sleep, 200
oNamesDoc := ComObjActive("Excel.Application")
Global AlertStatus := oNamesDoc.Range("C" CurrentRow).Text
Global AlertQualifier := oNamesDoc.Range("D" CurrentRow).text
Global First := oNamesDoc.Range("H" CurrentRow).text
Global Last := oNamesDoc.Range("I" CurrentRow).text
Global State := oNamesDoc.Range("J" CurrentRow).text
Global Type := oNamesDoc.Range("M" CurrentRow).text
Global HMSStatus := oNamesDoc.Range("P" CurrentRow).text
Global HMSQualifier := oNamesDoc.Range("Q" CurrentRow).text
Global LicenseNo := oNamesDoc.Range("N" CurrentRow).text
Global Scrubbed := oNamesDoc.Range("AB" CurrentRow).value
;----------------***GETTING THE DATA***----------------
Gui, 2:font, s12, Verdana
Gui, 2:Add, Text,x1 y8, %First% %Last% License:%LicenseNo%
Gui, 2:Add, Button, x1 y40, License
Gui, 2:Add, Button, x80 y40, Name
Gui, 2:Show, , Search Options - Row %CurrentRow%
WinWaitClose, Search Options - Row %CurrentRow%
If Var = 1
Continue
If Var = 2
Continue
}
msgbox DONE!
ExitApp
2ButtonLicense:
Var = 1
Gui, 2:Destroy
CALicense1()
LicenseAgreeDisagree()
return
return
2ButtonName:
Var = 2
Gui, 2:Destroy
CAName1()
NameAgreeDisagree()
return
return