如何实现修改后保存工作簿时触发全工作簿级邮件通知
工作簿保存后触发邮件通知的VBA实现
原代码是工作表级的Worksheet_Change事件,仅在指定单元格修改时触发邮件。要实现整个工作簿在修改后保存时触发通知,需要改用工作簿级的AfterSave事件,并调整逻辑如下:
操作步骤
- 打开Excel,按
Alt+F11进入VBA编辑器 - 在左侧项目窗口中,双击ThisWorkbook模块(对应当前工作簿)
- 删除原有代码,粘贴以下代码并按需修改配置项
修改后的VBA代码
Private Sub Workbook_AfterSave(ByVal Success As Boolean) ' 仅在保存成功且工作簿有内容修改时执行 If Success And Not ThisWorkbook.Saved Then Dim xOutApp As Object Dim xMailItem As Object Dim xMailBody As String On Error Resume Next Application.ScreenUpdating = False Application.DisplayAlerts = False ' 创建Outlook应用对象 Set xOutApp = CreateObject("Outlook.Application") Set xMailItem = xOutApp.CreateItem(0) ' 构建邮件正文 xMailBody = "工作簿信息:" & Chr(13) & _ "文件路径: " & ThisWorkbook.FullName & Chr(13) & _ "保存时间: " & Format$(Now, "yyyy/mm/dd hh:mm:ss") & Chr(13) & _ "修改用户: " & Environ$("username") With xMailItem .To = "收件人邮箱@xxx.com" ' 替换为实际收件人邮箱 .Subject = "【通知】工作簿已修改保存: " & ThisWorkbook.Name .Body = xMailBody .Attachments.Add ThisWorkbook.FullName ' 可选:自动附上当前工作簿 .Display ' 若要自动发送而非显示邮件,替换为 .Send End With ' 释放对象资源 Set xMailItem = Nothing Set xOutApp = Nothing Application.DisplayAlerts = True Application.ScreenUpdating = True End If End Sub
关键说明
- 事件选择:使用
Workbook_AfterSave事件,确保仅在工作簿保存完成后触发逻辑,避免未完成保存就发送邮件 - 触发条件:通过
Success参数判断保存是否成功,Not ThisWorkbook.Saved确保只有内容被修改后保存才触发(排除无修改时手动保存的情况) - 邮件配置:
- 修改
.To后的收件人邮箱 - 若无需自动附加工作簿,可删除
.Attachments.Add行 - 将
.Display改为.Send可实现自动发送邮件(需确保Outlook已正确配置)
- 修改
内容的提问来源于stack exchange,提问作者Ajay Rathod
相关产品推荐
相关产品推荐

