如何在Outlook宏生成的邮件中替换[NAME]和[REPORT]占位符?
替换Outlook模板邮件中的占位符
刚好处理过类似的需求,其实实现起来很简单——你只需要在调用msg.Display显示邮件之前,对模板生成的邮件正文执行字符串替换操作,把[NAME]和[REPORT]占位符替换成InputBox获取的内容就行。
修改后的完整宏代码
Sub Governance_Email() Dim UserName, ReportName, msg_1, msg_2, Title, Default Default = "1" Title = "Email Form" msg_1 = "Enter User" msg_2 = "Enter Report Name" UserName = InputBox(msg_1, Title, Default) ReportName = InputBox(msg_2, Title, Default) ' 增加判断,避免用户取消输入导致内容缺失 If UserName = "" Or ReportName = "" Then MsgBox "请输入完整的用户和报告名称哦!", vbExclamation Exit Sub End If Set msg = Application.CreateItemFromTemplate("<path_to_file>\template_addDescription.oft") ' 替换纯文本正文里的占位符 msg.Body = Replace(Replace(msg.Body, "[NAME]", UserName), "[REPORT]", ReportName) ' 如果你的模板是HTML格式(带排版、图片等),请注释上面的Body行,取消下面这行注释 ' msg.HTMLBody = Replace(Replace(msg.HTMLBody, "[NAME]", UserName), "[REPORT]", ReportName) msg.Display End Sub
关键细节说明
- 嵌套Replace函数:用两次嵌套的
Replace函数,先把正文里的[NAME]替换成UserName,再把结果里的[REPORT]替换成ReportName,一步完成两个占位符的替换。 - 选对正文属性:
- 如果你的模板是纯文本格式,直接用
msg.Body修改就行; - 如果模板是HTML格式(比如有字体样式、图片、表格),一定要用
msg.HTMLBody来替换,不然会破坏原有的HTML结构,导致格式错乱。
- 如果你的模板是纯文本格式,直接用
- 路径注意事项:记得把
<path_to_file>替换成你的oft模板的实际路径,比如"C:\My Outlook Templates\template_addDescription.oft",路径里有空格也没关系,直接写在字符串里就行。
这样调整后,你的宏就能自动把用户输入的内容填充到模板的对应位置啦。
内容的提问来源于stack exchange,提问作者PDogg95
相关产品推荐
相关产品推荐

