如何在每次运行VBA代码前清除MailEnvelope的收件人及密送信息?
解决MailEnvelope收件人信息残留问题
每次运行VBA代码前,必须手动清空MailEnvelope的To、Bcc、Cc字段——因为Excel的MailEnvelope对象会默认保留上一次使用的收件人数据,不会自动重置。
直接给你修改后的代码逻辑,每个独立的发邮件代码开头都加上清空步骤:
' 清空所有收件人相关字段 ActiveSheet.MailEnvelope.Item.To = "" ActiveSheet.MailEnvelope.Item.Bcc = "" ActiveSheet.MailEnvelope.Item.Cc = ""
比如仅发送给收件人的代码可以改成这样:
Sub SendOnlyTo() ' 先清空残留的收件人信息 ActiveSheet.MailEnvelope.Item.To = "" ActiveSheet.MailEnvelope.Item.Bcc = "" ActiveSheet.MailEnvelope.Item.Cc = "" ' 配置当前邮件的收件人 ActiveSheet.MailEnvelope.Item.To = "xxx@example.com" ' 其他邮件配置(主题、选定区域等) ActiveSheet.MailEnvelope.Subject = "仅收件人测试" ActiveSheet.MailEnvelope.Visible = True End Sub
同理,只发密送的代码也要先清空所有字段,再单独设置Bcc:
Sub SendOnlyBcc() ' 先清空残留信息 ActiveSheet.MailEnvelope.Item.To = "" ActiveSheet.MailEnvelope.Item.Bcc = "" ActiveSheet.MailEnvelope.Item.Cc = "" ' 配置密送 ActiveSheet.MailEnvelope.Item.Bcc = "yyy@example.com" ActiveSheet.MailEnvelope.Subject = "仅密送测试" ActiveSheet.MailEnvelope.Visible = True End Sub
原因很简单:MailEnvelope是依附于工作表的全局对象,不是每次调用都新建实例,所以上一次的配置会被保留。手动清空所有收件人字段后,再设置当前需要的内容,就能彻底避免残留问题。
内容的提问来源于stack exchange,提问作者Charlotte
相关产品推荐
相关产品推荐

