VBS脚本循环触发定时Popup窗口到点不显示问题咨询
问题根因
代码中的时间相关变量仅在脚本启动时赋值一次,循环内没有实时刷新变量值,判断逻辑永远使用脚本启动瞬间的时间,不会跟随系统时间变化。
- 时间变量
dtsnow、hours、minutes的赋值逻辑全部写在Do Loop循环外部,脚本启动时仅执行一次赋值,后续循环过程中变量值不会自动更新 - 11:30启动脚本时,
minutes变量被固定赋值为30,永远无法满足minutes > 30的判断条件,因此弹窗逻辑永远不会触发;11:31启动时minutes初始值为31,满足判断条件,所以可以正常弹出弹窗
修复方案
将时间变量的赋值逻辑移到循环内部,每次判断前都获取最新的系统时间即可:
Do dtsnow = Now() hours = Right("00" & Hour(dtsnow), 2) minutes = Right("00" & Minute(dtsnow), 2) If hours > 10 And minutes > 30 Then CreateObject("Wscript.Shell").Popup "ok", 0, "Window title" End If WScript.sleep 2000 'every 2 seconds Loop
额外优化建议
原判断逻辑hours > 10 And minutes > 30存在边界问题:比如12:05时,小时满足>10的条件,但分钟为5不满足>30的条件,明明已经过了10:30,却不会触发弹窗。可以直接对比时间值规避该问题:
Do If TimeValue(Now()) > TimeValue("10:30:00") Then CreateObject("Wscript.Shell").Popup "ok", 0, "Window title" End If WScript.sleep 2000 'every 2 seconds Loop
内容的提问来源于stack exchange,提问作者stckvrw
相关产品推荐
相关产品推荐

