[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

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

Do
If Hour(Time())=22 And Minute(Time())=4 Then
MsgBox "shuijiao"
Exit Do
End if
Loop

TOP

谢谢yu2n,最后我拿着你给我的链接弄成功了,而且比原来的程序要简单的多

TOP

我现在想知道的是怎么能不按执行键,在excel打开的情况下直接运行程序?

TOP

回复 14# 冰剑幽蓝
参考:
VBA实现定时提醒功能
http://blog.sina.com.cn/s/blog_4d99edbe0100hv9w.html
『千江有水千江月』千江有水,月映千江;万里无云,万里青天。    http://yu2n.qiniudn.com/

TOP

我网上看到可以用
Private Sub Workbook_Open()
自动提醒 ‘宏的代码
End Sub
但是我加在thisworkbook后,还是不能到时间就自动跳出来,而只能手动按执行键,到底是怎么回事啊?

TOP

我把excel放在附件里了,请大神帮我看看吧~(只写了一个8月28 22点睡觉的例子)

TOP

回复 11# 冰剑幽蓝
把Excel样板发上来看看。
『千江有水千江月』千江有水,月映千江;万里无云,万里青天。    http://yu2n.qiniudn.com/

TOP

我能再问问如何让excel的宏,在不用按执行按钮的时候自动执行吗?就是我打开这个excel表,一到22点它就能自动弹出对话框,提醒我要睡觉了?因为现在每次我只能到时间后到宏里去点一下执行按钮~忘各位大神指教

TOP

回复 9# CrLf
1. 关于超时的问题:可以考虑一般闹铃程序的模式,照搬逻辑控制部分。
   可以实现:星期一~星期六提醒、每天提醒、懒睡模式。当然,程序也会庞大很多。
2. 如果程序长期使用,可以考虑将设置写入注册表、或者配置文件。
『千江有水千江月』千江有水,月映千江;万里无云,万里青天。    http://yu2n.qiniudn.com/

TOP

回复 7# yu2n


    嗯,用 DateDiff 确实比较好,突然想起用 Timer 跨日期提醒还得另外换算...
    但这样不会重复提醒吗?

TOP

终于成功了,感谢大神,来拜一拜~

TOP

回复 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
复制代码
『千江有水千江月』千江有水,月映千江;万里无云,万里青天。    http://yu2n.qiniudn.com/

TOP

本帖最后由 冰剑幽蓝 于 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了,我估计是前面的时间没写对,麻烦帮我看看吧~

TOP

初始化定义两个全局变量:
  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 函数的

TOP

返回列表