gpt4 book ai didi

vba - 尽管 x>y,Do While 循环并未退出其 x
转载 作者:行者123 更新时间:2023-12-03 00:44:41 31 4
gpt4 key购买 nike

抱歉,标题太啰嗦了...

我在很长的 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。

有人看到我做错了什么吗......?提前致谢。

最佳答案

只是为了解释CLRJeeped正在谈论的整数内容:

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/

31 4 0

Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com