求助:Lotus Notes VBA宏无法复制信纸邮件正文到新邮件
我来帮你搞定这个Lotus Notes VBA宏的问题!你已经能完成文件附加,但卡在了信纸正文复制这一步——核心原因是Lotus Notes的邮件正文属于NotesRichTextItem富文本类型,不能像普通文本那样直接赋值,得用专门的富文本复制方法来处理。
我帮你调整了代码,补上了正文复制的关键逻辑,你可以直接参考:
Sub CreateNewNotesMailWithStationery() Dim ns As Object Dim db As Object Dim origStationeryDoc As Object ' 存储原信纸邮件文档 Dim newMailDoc As Object ' 存储新建的邮件文档 Dim origBodyRT As Object ' 原信纸的富文本正文项 Dim newBodyRT As Object ' 新邮件的富文本正文项 Dim targetFilePath As String Dim isFileAttached As Boolean isFileAttached = False Application.ScreenUpdating = False ' 初始化Lotus Notes会话 Set ns = CreateObject("Notes.NotesSession") Set db = ns.CurrentDatabase ' --- 替换成你获取信纸邮件的逻辑 --- ' 示例:通过视图+主题查找信纸,你可以改成按文档ID/模板库获取 Dim targetView As Object Set targetView = db.GetView("($Inbox)") ' 信纸所在的视图 Set origStationeryDoc = targetView.GetDocumentByKey("你的信纸主题", True) ' 替换为你的信纸主题 If Not origStationeryDoc Is Nothing Then ' 创建新邮件文档 Set newMailDoc = db.CreateDocument newMailDoc.Form = "Memo" newMailDoc.Subject = "你的新邮件主题" ' 设置新邮件主题 ' --- 核心:复制信纸的富文本正文 --- Set origBodyRT = origStationeryDoc.GetFirstItem("Body") If Not origBodyRT Is Nothing Then ' 在新邮件中创建正文富文本项 Set newBodyRT = newMailDoc.CreateRichTextItem("Body") ' 复制原信纸的正文内容(保留格式) Call newBodyRT.AppendRTItem(origBodyRT) End If ' --- 保留你的文件附加逻辑 --- targetFilePath = "C:\你的文件路径\example.pdf" ' 替换为你的目标文件路径 If Dir(targetFilePath) <> "" Then Call newBodyRT.EmbedObject(1454, "", targetFilePath, "Attachment") isFileAttached = True End If ' 打开新邮件窗口 newMailDoc.Open(True) Else MsgBox "未找到指定的信纸邮件,请检查主题或视图路径!" End If ' 清理对象 Application.ScreenUpdating = True Set ns = Nothing Set db = Nothing Set origStationeryDoc = Nothing Set newMailDoc = Nothing Set origBodyRT = Nothing Set newBodyRT = Nothing End Sub
关键细节说明:
- 富文本处理逻辑:必须用
AppendRTItem方法复制富文本内容,直接赋值newMailDoc.Body = origStationeryDoc.Body会丢失格式甚至失效。 - 信纸获取逻辑:示例用了视图+主题查找信纸,你可以根据实际场景替换(比如从专用模板库获取、通过文档唯一ID定位)。
- 文件附加时机:要在创建新的富文本正文项后执行附加操作,确保文件嵌入到正确的正文区域。
如果你的原有代码中已经有获取信纸的逻辑,只需要把正文复制的那段核心代码嵌入进去就行。
内容的提问来源于stack exchange,提问作者nikhil
相关产品推荐
相关产品推荐

