【发布时间】:2018-01-09 16:48:40
【问题描述】:
抱歉标题冗长...
我在一长串 VBA 代码中有一个(第二个)循环。循环是这样的:
Do While counterB < 40000
On Error Resume Next
AppActivate "Oracle Fusion Middleware Forms Services"
If Err.Number <> 0 Then
counterB = counterB + 100
Sleep 100
Else
counterB = counterB + 40001
End If
Loop
现在,有一个类似的循环在这个循环之前检查一个不同的程序,它工作得很好。检查程序是否打开,增加它的计数器(两个循环的计数器有不同的名称),再次检查,增加,冲洗和重复,最终找到它的程序,踢出它的循环,VBA 代码继续。
但是这第二个循环......它只是循环。一遍又一遍......它进入If/Else 就好了(所以,它是看到或没有看到AppActivate 中调用的程序),但While 语句没有确认 counterB 大于 40,000。
有没有人看到我做错了什么...? 提前致谢。
【问题讨论】:
-
你
dim counterB as integer并使用on error resume next吗? -
我不完全确定你在这里做什么,但我可以看到你在发现错误后并没有清除它 - 所以一旦
Err.Number有一个值,它就永远不会没有.也许在AppActivate之前使用Err.Clear? -
就循环而言,您的代码没有问题;即使 Err.Number 总是 0 它最终也应该结束。尝试调试,逐步执行,在 counterB 上使用“watch”。
-
但其他的都是对的:如果你将 counterB 定义为一个整数,它就会出错。可能 counterB = counterB + 40001 什么都不做,让 counterB 保持原样。
-
这就是为什么
On Error Resume Next是毒药。避免可避免的错误,处理其他错误。不要只是把它们推到众所周知的地毯下。