用Excel做一个倒计时器,可以实时看到离某个时刻还有几秒,比如说你惦记着的某人的生日,或者你盼望的放假。
用Excel先做出这样一个风格。
打开编辑器,键入如下代码,运行。
Private Sub Workbook_Open()
Do
Cells(2, 3) = Now '填写系统当前时间
dt1 = Now '系统当前时间送给变量
dt2 = Cells(3, 3) '目标时间送给变量
dd = DateDiff("d", dt1, dt2) - 1 '求出时间差(天数)
If dd < 0 Then dd = 0 '天数为负数时,调整为零
s0 = DateDiff("s", dt1, dt2) '求出时间差(秒数)
If s0 <= 0 Then '秒数小于或等于零
Cells(4, 3) = "时间到!"
Exit Sub '退出子程序
End If
r = s0 - dd * 24 * 3600 '求出不足一天的剩余秒数
hh = r \ 3600 '将剩余秒数转换为时、分、秒
mm = (r Mod 3600) \ 60
ss = (r Mod 3600) Mod 60
Cells(4, 3) = dd & "天 " & hh & "小时" & mm & "分" & ss & "秒"
t = Int(Timer) '取系统计时器值(秒)
Do While Int(Timer) = t '系统计时器秒数未改变,则循环等待
DoEvents '转让控制权给操作系统
Loop
Loop
End Sub
- 实时效果如下:
没有什么特别难懂的句法,特别说说转让控制权的用法。DoEvents 把控制权交给操作系统,以响应窗口重画、最大化、最小化等要求,避免出现应用程序不响应操作系统请求而被操作系统误以为死机了。
举个例子:在窗口中放一个textbox,然后写程序,循环从1到10万,然后循环体里面就是把这个数写到textbox里面,如果没有DoEvents,程序运行的时候就是死机一样,然后直到最后窗口显示10万,中间数字什么也看不见。
如果在每次写了textbox以后,都来一下DoEvents,窗口就会重画,运行的时候就能看见textbox里面的数一个一个的长上去。