Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用来自VBA的Lotus,如何将富文本项导入到新会话?_Vba_Lotus Notes - Fatal编程技术网

使用来自VBA的Lotus,如何将富文本项导入到新会话?

使用来自VBA的Lotus,如何将富文本项导入到新会话?,vba,lotus-notes,Vba,Lotus Notes,我有一个VBA函数,用于初始化LotusNotes会话、创建文档并发送它。它还接受NotesRichTextItem作为可选参数,我将其附加到电子邮件正文中 但是,我收到错误消息“所有对象必须来自同一个会话”。如何将此NotesRichTextItem“导入”到会话中 添加编辑代码 Sub SendLotusMail(SubjTxt As String, _ BodyTxt As String, _ EmailTo As Strin

我有一个VBA函数,用于初始化LotusNotes会话、创建文档并发送它。它还接受NotesRichTextItem作为可选参数,我将其附加到电子邮件正文中

但是,我收到错误消息“所有对象必须来自同一个会话”。如何将此NotesRichTextItem“导入”到会话中

添加编辑代码

Sub SendLotusMail(SubjTxt As String, _
                BodyTxt As String, _
                EmailTo As String, _
                EmailCC As String, _
                AutoSend As Boolean, _
                Attach As String, _
                ReportTitle As String, _
                Optional AppendToBody As NotesRichTextItem = Null)
On Error GoTo EH
    NtSession.Initialize
    OpenMailDb ReportTitle
    Set NtDoc = Ntdb.CreateDocument

    NtDoc.AppendItemValue "Form", "Memo"
    NtDoc.AppendItemValue "SendTo", EmailTo
    NtDoc.AppendItemValue "CopyTo", EmailCC
    NtDoc.AppendItemValue "Subject", SubjTxt
    Set NtBodyRT = NtDoc.CreateRichTextItem("Body")
    NtDoc.AppendItemValue "Body", NtBodyRT
    If Attach <> "" Then NtBodyRT.EmbedObject EMBED_ATTACHMENT, "", Attach, "Attachment"
    NtBodyRT.AppendText BodyTxt

    'This next line throws the error "All objects must be from the same session"
    NtBodyRT.AppendRTItem AppendToBody
将SendLotusMail(subjecttxt作为字符串_
BodyTxt作为字符串_
EmailTo作为字符串_
EmailCC作为字符串_
自动结束为布尔值_
作为字符串附加_
ReportTitle作为字符串_
可选的AppendToBody As NotesRichTextItem=Null)
关于错误转到EH
NtSession.Initialize
OpenMailDb报告标题
设置NtDoc=Ntdb.CreateDocument
NtDoc.AppendItemValue“表格”、“备忘录”
NtDoc.AppendItemValue“发送到”,EmailTo
NtDoc.AppendItemValue“CopyTo”,EmailCC
NtDoc.AppendItemValue“主题”,subjecttxt
设置NtBodyRT=NtDoc.CreateRichTextItem(“正文”)
NtDoc.AppendItemValue“Body”,NtBodyRT
如果附加“”,则NtBodyRT.EmbedObject嵌入_附件“”,附加“附件”
NtBodyRT.AppendText-BodyTxt
'下一行抛出错误“所有对象必须来自同一会话”
ntbody rt.appendrItem AppendToBody
找到编辑解决方案
我不太喜欢它,但我通过将RichTextItem对象、它的父NotesDocument和它的父NotesSession传递给这个函数,解决了所有这些问题。现在我用3个可选对象而不是1个调用这个过程。万岁

编辑找到的新解决方案
嗯,以前的解决方案给我带来了问题,所以在我找到(或有人建议)解决方法之前,我只会对需要它的报告使用一些自定义电子邮件过程。它确实复制了一些代码,但并不显著。

在这里查看一些代码会有所帮助。不过,我会猜一猜发生了什么事

在VBA函数中,您需要在电子邮件中创建一个新的NotesRichTextItem对象。例如:

Dim docMail as New NotesDocument(db)
Dim rtBody as New NotesRichTextItem(docMail, "Body")

Call rtBody.AppendRTItem(myRTparameter)

我想这应该不会出错

在这里查看一些代码会有所帮助。不过,我会猜一猜发生了什么事

在VBA函数中,您需要在电子邮件中创建一个新的NotesRichTextItem对象。例如:

Dim docMail as New NotesDocument(db)
Dim rtBody as New NotesRichTextItem(docMail, "Body")

Call rtBody.AppendRTItem(myRTparameter)

我想这应该不会出错

问题可能是NtSession对象正在sub中重新初始化。如果调用例程发送富文本项,我假设它一定也创建并初始化了NotesSession。如果是这种情况,您可能希望代码重用同一会话。看起来NtSession是一个全局会话-如果是这样,您可以:

  • 强制执行呼叫路由始终已初始化该全局会话
  • 可选地将NtSession对象作为参数传入(代码可以在创建和初始化自己的会话之前检查该对象是否为null);或
  • 在调用Initialize之前,请检查NtSession是否已初始化-为此,您可以检查属性并查看对象是否出错(未测试代码):


  • 问题可能是NtSession对象正在sub中重新初始化。如果调用例程发送一个富文本项,我假设它一定也创建并初始化了NotesSession。如果是这种情况,您可能希望代码重用同一会话。看起来NtSession是一个全局会话-如果是这样,您可以:

  • 强制执行呼叫路由始终已初始化该全局会话
  • 可选地将NtSession对象作为参数传入(代码可以在创建和初始化自己的会话之前检查该对象是否为null);或
  • 在调用Initialize之前,请检查NtSession是否已初始化-为此,您可以检查属性并查看对象是否出错(未测试代码):

  • (我写这篇文章是为了结束我的问题) 我通过对需要自定义设置的报告使用单独的电子邮件程序来解决这个问题。是的,代码有一些重复,但它比我即将制作的庞然大物要好得多。

    (我写这篇文章是为了结束我的问题)
    我通过对需要自定义设置的报告使用单独的电子邮件程序来解决这个问题。是的,代码有一些重复,但它比我即将制作的庞然大物要好得多。

    谢谢,代码已经添加。我在这里有一些灵活性,所以如果我需要导入RT的父文档或父会话,我可以这样做。(让我重新表述我之前的评论)。我已根据您的请求将我的代码添加到我的帖子中。不幸的是,我认为您的示例代码不适用于这里。因此,问题仍然悬而未决。谢谢,添加了代码。我在这里有一些灵活性,所以如果我需要导入RT的父文档或父会话,我可以这样做。(让我重新表述我之前的评论)。我已根据您的请求将我的代码添加到我的帖子中。不幸的是,我认为您的示例代码不适用于这里。所以,问题仍然悬而未决。谢谢,但我已经通过制作两个单独的NotesSession对象来解决这个问题,一个用于此函数,另一个用于调用它的函数。不幸的是,这也是源问题,因为我现在得到错误“所有对象必须来自同一个会话”。谢谢,但我已经解决了这个问题,制作了两个单独的NotesSession对象,一个用于此函数,另一个用于调用它的函数。不幸的是,这也是源代码问题,因为我现在得到错误“所有对象必须来自同一个会话”。为什么需要传入父文档和会话?您应该能够从RichTextItem中检索它们