Board logo

标题: [问题求助] 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

为啥设置这么小的容差...
  1. Abs(xzsj - txsj) < 0.00001
复制代码

作者: 冰剑幽蓝    时间: 2014-8-27 18:11

我其实是做了个EXCEL的月历表,想每天记些事项并提前一小时提醒,问题是程序能运行,但提示的内容始终不出来,麻烦帮我看看怎么回事
作者: CrLf    时间: 2014-8-27 18:48

初始化定义两个全局变量:
  1. txsj = #21:00# * 86400
  2. flag = Timer < txsj
复制代码
然后在函数中调用:
  1. If flag And Timer > txsj Then
  2.    MsgBox "睡觉!"
  3.    flag = False
  4. 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() 函数:
  1. Sub AutoTips()
  2.     Dim dtTips As Date
  3.     dtTips = Format("2014-8-28 09:30", "yyyy.MM.dd hh:nn:ss")
  4.     dtTips = DateAdd("h", -1, dtTips)
  5.     If DateDiff("s", Now, dtTips) <= 0 Then
  6.         MsgBox "go to sleep ..."
  7.     End If
  8. 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