在多个条件下执行
Do While with Multiple Conditions
简单的问题,我一定是遗漏了一些明显的东西。
我正在尝试创建一个子例程来轮询 window 是否打开,我的目标是通过一个循环来完成此操作,该循环将 运行 同时满足两个条件。我不断收到错误消息:
Run time error 13: Type Mismatch
在 Do while 循环中,在 SO 上搜索了类似的问题后,我仍然不太确定我做错了什么。
这是不断出错的行:
Sub FindHWND()
Dim HWNDOut as string
Dim Timer as Date
Timer = Now()
'This following line is the one erroring out.
Do While ((Now() < Timer + TimeValue("00:00:10")) And (HWNDOut = 0))
HWNDOut = CStr(Hex(FindWindowEx(0&, 0, "SunAwtFrame", "Graph.graphml - yEd")))
Debug.Print HWNDOut
Sleep (100)
Loop
'Other, following sub and code that is not relevant
End Sub
其中Timer
是循环开始前的Now()
,HWNDOut
是我要找的window的句柄,会找到在循环中。
这个循环所做的就是每100毫秒查看一次第三方程序的window是否已经打开,以防止在下一个子程序中丢失命令。
Post 脚本:如果有人有任何建议如何做得更好,我会洗耳恭听。这是我第一次使用 UI 自动化,所以我还在学习。
编辑:为上下文块添加了更多代码。
与:
And (HWNDOut = 0))
您正在将 String 与数值进行比较......这将失败。
尝试将变量名称 Timer 更改为其他名称,例如StartTime(认为 VBA 中有一个 Timer 函数,其中 returns 一个不同类型的值;所以最好不要使用保留或语义上重要的词。
可能有帮助,也可能没有,祝你好运。
简单的问题,我一定是遗漏了一些明显的东西。
我正在尝试创建一个子例程来轮询 window 是否打开,我的目标是通过一个循环来完成此操作,该循环将 运行 同时满足两个条件。我不断收到错误消息:
Run time error 13: Type Mismatch
在 Do while 循环中,在 SO 上搜索了类似的问题后,我仍然不太确定我做错了什么。
这是不断出错的行:
Sub FindHWND()
Dim HWNDOut as string
Dim Timer as Date
Timer = Now()
'This following line is the one erroring out.
Do While ((Now() < Timer + TimeValue("00:00:10")) And (HWNDOut = 0))
HWNDOut = CStr(Hex(FindWindowEx(0&, 0, "SunAwtFrame", "Graph.graphml - yEd")))
Debug.Print HWNDOut
Sleep (100)
Loop
'Other, following sub and code that is not relevant
End Sub
其中Timer
是循环开始前的Now()
,HWNDOut
是我要找的window的句柄,会找到在循环中。
这个循环所做的就是每100毫秒查看一次第三方程序的window是否已经打开,以防止在下一个子程序中丢失命令。
Post 脚本:如果有人有任何建议如何做得更好,我会洗耳恭听。这是我第一次使用 UI 自动化,所以我还在学习。 编辑:为上下文块添加了更多代码。
与:
And (HWNDOut = 0))
您正在将 String 与数值进行比较......这将失败。
尝试将变量名称 Timer 更改为其他名称,例如StartTime(认为 VBA 中有一个 Timer 函数,其中 returns 一个不同类型的值;所以最好不要使用保留或语义上重要的词。
可能有帮助,也可能没有,祝你好运。