开发Outlook VBA宏:将原收件人移至抄送并添加新收件人
Outlook VBA宏:转移原收件人至抄送并添加新收件人
以下是实现需求的完整VBA代码,包含关键逻辑优化和格式修正:
Option Explicit Sub ReplyWithRecipientsMovedToCC() Dim olItem As Outlook.MailItem Dim olReply As Outlook.MailItem Dim olRecip As Outlook.Recipient Dim originalRecip As Outlook.Recipient Dim newRecipients As Variant Dim pickupDate As String ' 定义需要添加的两位新收件人邮箱 newRecipients = Array("Joesmith@gmail.com", "Janedoe@company.com") ' 格式化次日取件日期为易读格式 pickupDate = Format(Date + 1, "dddd, mmm d yyyy") For Each olItem In Application.ActiveExplorer.Selection ' 仅处理邮件类型项 If olItem.Class = olMail Then ' 创建基础回复邮件(初始默认发给原发件人) Set olReply = olItem.Reply ' 清空默认收件人(若需保留原发件人,删除此行) olReply.To = "" ' 添加两位新收件人至收件人(To)栏 Dim newRecip As Variant For Each newRecip In newRecipients Set olRecip = olReply.Recipients.Add(newRecip) olRecip.Type = olTo Next newRecip ' 将原邮件所有收件人(To/CC)转移至抄送(CC)栏 For Each originalRecip In olItem.Recipients Set olRecip = olReply.Recipients.Add(originalRecip.Address) olRecip.Type = olCC olRecip.Name = originalRecip.Name ' 保留原收件人显示名称 Next originalRecip ' 拼接邮件正文,使用HTML换行保证格式正确 olReply.HTMLBody = "Hi, This customer would like to request a pickup on " & pickupDate & "<br><br>" & olReply.HTMLBody ' 显示邮件(如需自动发送,替换为olReply.Send) olReply.Display End If Next olItem End Sub
核心逻辑说明
- 原收件人转移:遍历原邮件的
Recipients集合,将所有收件人(无论原To/CC类型)统一添加到回复邮件的CC栏,同时保留原显示名称。 - 新收件人添加:通过数组批量定义新收件人,循环添加到回复邮件的To栏,方便后续修改。
- 正文格式修复:将原代码中的
vbCrLf替换为HTML标签<br>,解决纯文本换行在HTML邮件中失效的问题。 - 错误防护:增加邮件类型校验,避免选中日历、任务等非邮件项时触发错误。
自定义调整指南
- 修改
newRecipients数组中的邮箱地址为实际需要的收件人。 - 若需要保留原邮件发件人在To栏,删除
olReply.To = ""语句。 - 若无需预览直接发送邮件,将
olReply.Display替换为olReply.Send(建议先测试确认逻辑无误)。
内容的提问来源于stack exchange,提问作者FalconWing 1813
相关产品推荐
相关产品推荐

