1

我的程序会询问用户他稍后将要进行的任何活动(例如会议/特别午餐活动/提交报告/支付账单/生日),并会在时间到来时提醒用户。

这是我的代码:

Dim remind
re=MsgBox("Do you want me to remind you anything later on?", vbYesNo, "Reminder")
If re=6 then call main

Sub main
    ' Ask for the time that the user wanted to be reminded
    remind=InputBox("At what time?" & vbNewLine & 
                    "Please use this format {H:MM:SS AM/PM}" & vbNewLine &
                    "Note: H is in 12h format")

    ' Description eg. "Lunch with boss"
    reminder=InputBox("Any discription you want to add in?")

    Do Until check=remind
        check=Time
        If check=remind Then MsgBox reminder
    Loop
End Sub

例如,我输入12:30:00 PMand Lunch with boss。即使时间到了,什么也没有发生,也没有弹出窗口。当我检查我的 TaskManager 时,它仍在运行。

我正在使用 wscript.exe 来运行这个脚本。这do until check=remind是不起作用的部分。如果我把do until check="12:30:00 PM"它会工作。

PS:我知道我们可以使用 Microsoft Outlook 进行提醒,甚至可以使用我们的手机。但这非常适合那些 24 小时在电脑前、懒得使用手机和更新前景的员工。

4

1 回答 1

1

转换为日期数据类型

问题似乎是该remind变量是String数据类型,而该check变量是Date数据类型。当您尝试比较它们时,它们总是不相等,即使两种类型中的实际日期相同。

您可以通过在进入循环之前 使用CDate函数转换为 Date来解决该问题。remind

remind = CDate(remind)

验证

因为您现在使用 CDate 来转换用户的输入,如果他们打错字并输入无效的日期,它会弹出一个错误框并结束程序。您可能希望在转换之前使用IsDate确保它是一个有效时间,然后如果用户输入错误,请优雅地要求用户再次输入时间。

CPU使用率

您的循环将坐在那里占用运行它的机器的一个核心的 100% CPU 使用率。除了其他副作用外,这可能会降低用户的计算机速度。

要解决此问题,您需要减慢循环速度,使其每秒只检查几次,而不是每秒检查几百次。将此语句插入循环中,使其休眠 500 毫秒,然后重试。

WScript.Sleep 500
于 2013-05-28T05:11:03.150 回答