MICROSOFT

EP04. “Delay a Macro 延迟执行宏”

首页 Microsoft 工具 Excel · VBA · Date and Time · EP04
约 3 分钟· #EP04#Excel#Date and Time
🔒 登录后可标记已读
  • Application.OnTime 能让 VBA 在指定时间点(或延迟几秒后)自动执行某个程序
  • 讲怎么做一个「5 秒后弹出提醒」的例子,以及怎么改成在指定时刻执行
  • 前置知识:基本的 Sub 写法
  • 学完能自己排定「延迟执行」或「定时执行」的宏

重点内容


适用版本

桌面版通用(Excel 365 / 2021 / 2019 等)。


建立要延迟执行的程序

Sub reminder()
  MsgBox "Don't forget your meeting at 14:30"
End Sub

延迟 5 秒后执行

在按钮绑定的代码里写:

Application.OnTime Now() + TimeValue("00:00:05"), "reminder"

点击按钮后,程序不会立刻跳出提醒,而是等 5 秒后才执行 reminder


改成在指定时刻执行

Application.OnTime TimeValue("14:00:00"), "reminder"

把参数从「现在 + 延迟」换成一个固定的时间点,到了这个时间就会自动跳出提醒。

📌 想要不用手动点按钮就自动提醒,可以把这段代码放进 Workbook Open 事件里,一打开工作簿就排定提醒——但工作簿必须保持打开状态,提醒才会准时触发。


两种写法怎么选

写法适合场景备注
Now() + TimeValue(...)从「现在」起算,延迟固定秒数/分钟后执行常用于「点击后 N 秒提醒」
TimeValue("固定时刻")不管现在几点,都在某个固定时刻执行常用于「每天到点自动提醒」

学完你会

  • ✅ 用 Application.OnTime 排定一个延迟执行的宏
  • ✅ 分辨「现在 + 延迟秒数」和「指定固定时刻」两种参数写法
  • ✅ 知道工作簿必须保持打开,OnTime 排定的提醒才会准时触发

常见错误

  • reminder 写成字符串以外的形式(比如忘记加引号),OnTime 找不到要执行的程序名称
  • 排定了提醒时间,但工作簿在提醒时间到之前就被关闭了,提醒不会触发
  • 混淆「现在 + 延迟秒数」和「指定固定时刻」这两种写法,用错了参数格式

Sources

Blog / Website:

  1. Delay a Macro