如何基于单元格值每日仅触发一次Excel宏?现有代码遇重复执行问题
解决Excel宏每日仅触发一次邮件的问题
核心思路是记录最后发送邮件的日期,每次触发时先判断今日是否已发送过,避免重复执行。具体实现如下:
1. 准备日期存储单元格
选一个不会被误操作的单元格(比如Z1)用来记录最后发送邮件的日期。右键该单元格→设置单元格格式→保护→勾选「隐藏」,防止误编辑。
2. 修改Worksheet_Calculate事件代码
替换原事件代码为以下内容,加入日期判断逻辑:
Private Sub Worksheet_Calculate() ' 两个触发条件:C15值低于72,且今日未发送过邮件 If Range("C15").Value < 72 And Range("Z1").Value <> Date Then Call Send_Email ' 发送成功后更新最后发送日期为当天 Range("Z1").Value = Date End If End Sub
3. 首次初始化
第一次使用前,把Z1单元格的值清空(或设为一个早于今日的日期),确保当天的触发条件能正常生效。
原理说明
Date函数会自动获取系统当前日期,跨天时Range("Z1").Value <> Date会自动变为True,第二天满足价格条件时会再次触发邮件。- 你的电脑24/7运行,无需考虑文件重启导致的日期丢失问题,单元格存储的日期会一直保留在文件中。
内容的提问来源于stack exchange,提问作者HunterN
相关产品推荐
相关产品推荐

