标题: [问题求助] VBS如何用dateadd提前一小时提醒? [打印本页]
作者: 冰剑幽蓝 时间: 2014-8-27 16:35 标题: VBS如何用dateadd提前一小时提醒?
我做了个程序,需要在晚上10点前一小时,自动提醒“睡觉”,程序能够正常运行,但是始终没有弹出“睡觉”的对话框,我还注意到,我在用F8执行程序的时候,每到msgbox"睡觉"的时候就自动跳过,并且在运行程序的时候,excel宏的标题栏右边有一个打括号的中断,麻烦各位高手帮忙看看是怎么回事?最好能把正确的程序写给我,万分感谢~
Sub 自动提醒()
Dim xzsj, txsj 'xzsj为现在时间,txsj为提醒时间
xzsj = Now
txsj = DateAdd("h", -1, "2014-8-26 22:00")
If Abs(xzsj - txsj) < 0.00001 Then
MsgBox "睡觉"
End If
End Sub
作者: CrLf 时间: 2014-8-27 16:55
这活用计划任务更合理
作者: CrLf 时间: 2014-8-27 16:56
为啥设置这么小的容差...- Abs(xzsj - txsj) < 0.00001
复制代码
作者: 冰剑幽蓝 时间: 2014-8-27 18:11
我其实是做了个EXCEL的月历表,想每天记些事项并提前一小时提醒,问题是程序能运行,但提示的内容始终不出来,麻烦帮我看看怎么回事
作者: CrLf 时间: 2014-8-27 18:48
初始化定义两个全局变量:- txsj = #21:00# * 86400
- flag = Timer < txsj
复制代码
然后在函数中调用:- If flag And Timer > txsj Then
- MsgBox "睡觉!"
- flag = False
- End If
复制代码
如果需要指明具体日期,自行改写成用 now 函数的
作者: 冰剑幽蓝 时间: 2014-8-27 21:01
本帖最后由 冰剑幽蓝 于 2014-8-27 21:10 编辑
我有2个问题:
1,是不是提前一个小时提醒不能用dateadd这个函数?
2,我用你的程序执行了一遍,执行到"if flag and timer>txsj then"后,就直接跳到end if了,是什么原因?
我自己写的那个程序也是,运行到“If Abs(xzsj - txsj) < 0.00001 Then”就直接跳到end if了,我估计是前面的时间没写对,麻烦帮我看看吧~
作者: yu2n 时间: 2014-8-28 09:33
回复 6# 冰剑幽蓝
也许你需要 DateDiff() 函数:- Sub AutoTips()
- Dim dtTips As Date
- dtTips = Format("2014-8-28 09:30", "yyyy.MM.dd hh:nn:ss")
- dtTips = DateAdd("h", -1, dtTips)
-
- If DateDiff("s", Now, dtTips) <= 0 Then
- MsgBox "go to sleep ..."
- End If
- End Sub
复制代码
作者: 冰剑幽蓝 时间: 2014-8-28 11:52
终于成功了,感谢大神,来拜一拜~
作者: CrLf 时间: 2014-8-28 15:11
回复 7# yu2n
嗯,用 DateDiff 确实比较好,突然想起用 Timer 跨日期提醒还得另外换算...
但这样不会重复提醒吗?
作者: yu2n 时间: 2014-8-28 18:00
回复 9# CrLf
1. 关于超时的问题:可以考虑一般闹铃程序的模式,照搬逻辑控制部分。
可以实现:星期一~星期六提醒、每天提醒、懒睡模式。当然,程序也会庞大很多。
2. 如果程序长期使用,可以考虑将设置写入注册表、或者配置文件。
作者: 冰剑幽蓝 时间: 2014-8-28 18:31
我能再问问如何让excel的宏,在不用按执行按钮的时候自动执行吗?就是我打开这个excel表,一到22点它就能自动弹出对话框,提醒我要睡觉了?因为现在每次我只能到时间后到宏里去点一下执行按钮~忘各位大神指教
作者: yu2n 时间: 2014-8-28 18:52
回复 11# 冰剑幽蓝
把Excel样板发上来看看。
作者: 冰剑幽蓝 时间: 2014-8-28 19:14
我把excel放在附件里了,请大神帮我看看吧~(只写了一个8月28 22点睡觉的例子)
作者: 冰剑幽蓝 时间: 2014-8-28 19:37
我网上看到可以用
Private Sub Workbook_Open()
自动提醒 ‘宏的代码
End Sub
但是我加在thisworkbook后,还是不能到时间就自动跳出来,而只能手动按执行键,到底是怎么回事啊?
作者: yu2n 时间: 2014-8-28 20:00
回复 14# 冰剑幽蓝
参考:
VBA实现定时提醒功能
http://blog.sina.com.cn/s/blog_4d99edbe0100hv9w.html
作者: 冰剑幽蓝 时间: 2014-8-28 20:08
我现在想知道的是怎么能不按执行键,在excel打开的情况下直接运行程序?
作者: 冰剑幽蓝 时间: 2014-8-29 16:59
谢谢yu2n,最后我拿着你给我的链接弄成功了,而且比原来的程序要简单的多
作者: 437153 时间: 2014-8-29 22:06
Do
If Hour(Time())=22 And Minute(Time())=4 Then
MsgBox "shuijiao"
Exit Do
End if
Loop
欢迎光临 批处理之家 (http://bbs.bathome.net/) |
Powered by Discuz! 7.2 |