You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Excel Online(Office 365)中按指定日期8点触发邮件发送

解决方案:Excel Online(OneDrive共享)定时触发邮件提醒

注意:Excel Online本身不支持VBA自动定时触发

在线版Excel没有后台运行VBA的环境,无法直接通过VBA实现每天自动检查日期并发送邮件,推荐用Power Automate(微软流)实现云端自动化,或者使用桌面版Excel配合VBA(需保持工作簿打开)。


方案一:Power Automate(云端自动触发,推荐)

这是适合OneDrive共享Excel Online的最佳方案,无需依赖本地Excel:

  1. 打开Power Automate,登录你的Office 365账号,创建计划云流。
  2. 设置触发条件:选择“每天”,时间设为上午8点(注意时区要选你所在的时区)。
  3. 添加动作:选择Excel Online (Business) → 列出表格行,配置:
    • 位置:选“OneDrive for Business”或“OneDrive”(根据你的存储位置)
    • 文档库:找到共享工作簿所在的文件夹
    • 文件:选择你的目标工作簿
    • 表格:选择reminders工作表(如果没转成表格,先在Excel里把A列数据转成结构化表格)
  4. 添加动作:筛选数组,设置筛选规则:
    • 从列出表格行的输出中选择date列
    • 运算符选“等于”
    • 右侧输入表达式:formatDateTime(utcNow(), 'yyyy-MM-dd')(把UTC时间转成本地日期格式,和你Excel里的日期格式匹配)
  5. 添加条件动作:判断筛选后的数组是否不为空(即当天日期在列表中存在)。
  6. 如果条件成立,添加Outlook → 发送电子邮件(V2)动作,填写收件人、主题、正文,和你原VBA代码的内容一致。
  7. 保存流,测试运行,之后每天上午8点会自动检查日期并发送邮件。

方案二:桌面版Excel配合VBA(需保持工作簿打开)

如果你会用桌面版Excel打开这个共享工作簿,可以用VBA的Application.OnTime实现定时触发,但需要保持Excel运行且电脑不休眠:

步骤1:修改VBA代码

  1. 打开桌面版Excel,打开目标工作簿,按Alt+F11进入VBA编辑器。
  2. 双击ThisWorkbook模块,粘贴以下代码(工作簿打开时设置定时):
Private Sub Workbook_Open()
    Dim triggerTime As Date
    triggerTime = Date + TimeValue("08:00:00")
    ' 若当前时间已过8点,设置为次日8点
    If Now > triggerTime Then
        triggerTime = Date + 1 + TimeValue("08:00:00")
    End If
    ' 定时触发检查日期并发送邮件的过程
    Application.OnTime triggerTime, "CheckAndSendEmail"
End Sub
  1. 插入一个新的标准模块(右键插入→模块),粘贴以下代码:
Public Sub CheckAndSendEmail()
    Dim ws As Worksheet
    Dim lastRow As Long
    Dim i As Long
    Dim todayDate As Date
    
    Set ws = ThisWorkbook.Worksheets("reminders")
    lastRow = ws.Cells(ws.Rows.Count, "A").End(xlUp).Row
    todayDate = Date ' 获取当天日期
    
    ' 遍历A列日期(跳过表头,从第2行开始)
    For i = 2 To lastRow
        ' 匹配日期时发送邮件
        If ws.Cells(i, "A").Value = todayDate Then
            SendEmailNow
            Exit For ' 找到匹配后退出循环,避免重复发送
        End If
    Next i
    
    ' 设置次日的定时任务
    Dim nextTriggerTime As Date
    nextTriggerTime = Date + 1 + TimeValue("08:00:00")
    Application.OnTime nextTriggerTime, "CheckAndSendEmail"
End Sub

Public Sub SendEmailNow()
    Dim EmailApp As Outlook.Application
    Set EmailApp = New Outlook.Application
    Dim NewEmailItem As Outlook.MailItem
    Set NewEmailItem = EmailApp.CreateItem(olMailItem)
    
    NewEmailItem.To = "to@company.com"
    NewEmailItem.Subject = "Here's your reminder"
    NewEmailItem.HTMLBody = "I am reminding you"
    NewEmailItem.Send
    
    ' 释放对象
    Set NewEmailItem = Nothing
    Set EmailApp = Nothing
End Sub
  1. 保存工作簿为.xlsm格式(启用宏的工作簿)。

注意事项

  • 必须保持该工作簿在桌面版Excel中打开,电脑不能休眠或关机,否则定时任务会失效。
  • 若多人同时打开共享工作簿,可能会重复发送邮件,需额外添加防重复逻辑(比如在工作表中标记已发送)。

内容的提问来源于stack exchange,提问作者Kris

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.18 06:52:47