VBA/VBScript中如何仅当除法结果为整数时执行指定分支逻辑
VBA 每累计执行8次流程自动触发PF11按键的判断逻辑修复
问题根因
你当前使用的If y/8 Then判断逻辑完全不满足需求:
- VBA中
/是浮点除法运算符,只要计算结果是非0数值,就会被If语句判定为逻辑真,几乎每次循环都会进入分支 - 该写法完全没有实现“仅当y除以8的算术结果为整数时触发”的判断要求
最优实现方案
使用VBA内置的取模运算符Mod做判断即可:Mod会返回两个数相除后的余数,当y是8的整数倍时,y Mod 8的返回值为0,刚好匹配你需要的“除法结果为整数”的判断条件。
注意:需要匹配你代码中计数器
y的初始值与自增位置,避免首次循环未跑满8次就误触发。如果你的y初始值为0,且在判断逻辑之后才执行y = y + 1,直接写y Mod 8 =0会在第一次循环就误触发,需要调整计数器位置或判断条件。
修正后代码(适配计数逻辑,触发时机为第8、16、24...次执行完InitialCopy后)
Do While y < Entries InitialCopy ' 先更新计数器,再判断是否累计到8的倍数,避免初始y=0时首次循环误触发 y = y + 1 If y Mod 8 = 0 Then autECLSession.autECLOIA.WaitForInputReady autECLSession.autECLPS.SendKeys "[pf11]" End If Loop
如果你要保留原来y在判断分支之后自增的写法,只需要把判断条件改成(y + 1) Mod 8 = 0即可,运行效果和上述代码完全一致。
其他可选判断方式
如果不想用取模运算,也可以通过整数除法反推验证整除性:
If y = (y \ 8) * 8 Then ' 放置PF11触发逻辑 End If
这里\是VBA的整数除法运算符,会舍去小数部分返回整数商,如果商乘8等于原y值,就说明y可以被8整除,算术结果为整数。不过这种写法可读性比Mod方案差,优先推荐使用取模判断。
内容的提问来源于stack exchange,提问作者ts4r
相关产品推荐
相关产品推荐

