作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
抱歉,标题太啰嗦了...
我在很长的 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。
有人看到我做错了什么吗......?提前致谢。
最佳答案
只是为了解释CLR和Jeeped正在谈论的整数
内容:
VBA 中的整数为 2 个字节并有符号(可以有负值),因此最大值为 32767。如果尝试向其中写入更大的值,则会收到运行时错误 6(溢出)并且该值保持不变不变。由于存在on error resume next
,因此不会显示错误,该值保持在最大值 32767 并且永远不会达到值 40000 - 您陷入了无限循环。
如果您确实需要在代码中on error resume next
,您应该检查 Err.Number 以获得您期望的特定值(并重新引发错误或显示 MsgBox 或类似的内容) 。
您的代码可能如下所示:
Do While counterB < 40000
Dim saveError As Long
On Error Resume Next
AppActivate "Oracle Fusion Middleware Forms Services"
saveError = Err.Number
On Error GoTo 0
If saveError <> 0 Then
If Err.Number = <ENTER YOUR SPECIFIC ERROR CODE> Then
counterB = counterB + 100
Sleep 100
Else
Err.Raise saveError
End If
Else
counterB = counterB + 40001
End If
Loop
关于vba - 尽管 x>y,Do While 循环并未退出其 x<y 循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48172955/
我是一名优秀的程序员,十分优秀!