EP04. “Delay a Macro 延迟执行宏”
🔒 登录后可标记已读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: