You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Lotus Notes自动化报错:调用的对象已与客户端断开连接如何解决

问题根因

你遇到的The object invoked has disconnected from its clients是Lotus Notes COM调用的典型异常,触发在NUIDocument.Close行的核心原因是:
当你调用NFwdUIDocument.Send并关闭转发邮件窗口后,你之前打开的原始邮件对应的NUIDocumentUI对象,已经被Notes后台自动释放了,此时再主动调用Close方法,目标COM对象已经不存在,就会抛出该错误。
你之前添加的固定Sleep延迟不可靠,Notes的响应速度受邮件大小、系统负载、内存占用等多因素影响,固定时长无法覆盖所有场景。

解决方法
  • 方案1:保留现有UI操作逻辑,优化对象销毁流程
    把原来循环判断当前文档、关闭原始邮件的代码段全部删除,替换为带错误捕获的安全释放逻辑,避免操作已经被释放的对象:
On Error Resume Next
If Not NUIDocument Is Nothing Then
    ' 仅当对象存活时执行关闭
    NUIDocument.Close
    Set NUIDocument = Nothing
End If
On Error GoTo 0

也可以直接去掉原始邮件的关闭步骤,你打开原始邮件时传入的第一个参数是False,也就是只读模式,就算不手动关闭,Notes也会自动回收该窗口,不会造成资源残留。

  • 方案2:改用后台非UI逻辑实现转发,从根源避免问题
    Lotus Notes支持不用打开UI窗口就完成邮件转发,完全避开UI层异步操作带来的对象释放问题,执行效率也更高,改造后的核心逻辑示例:
If Not NDocument Is Nothing Then
    ' 后台生成转发邮件,无需打开UI窗口
    Dim NFwdDoc As Object
    Set NFwdDoc = NDocument.Forward()
    NFwdDoc.SendTo = forwardToEmailAddresses
    ' 写入HTML内容可以直接操作富文本字段,不需要调用UI的Import方法
    Dim rtBody As Object
    Set rtBody = NFwdDoc.GetFirstItem("Body")
    Call rtBody.Import("HTML File", "HTML DIRECTORY")
    ' 发送邮件,参数False表示不需要保存到已发送
    Call NFwdDoc.Send(False)
    
    ' 不需要处理任何UI窗口关闭逻辑
    Set NFwdDoc = Nothing
Else
    MsgBox vbCrLf & findSubjectLike & vbCrLf & "not found in Inbox"
End If

该方案完全不需要操作UI层对象,不会出现对象断开的异常,同时也不需要加任何Sleep延迟,稳定性远高于UI操作方案。

内容的提问来源于stack exchange,提问作者Drawleeh

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.01 16:06:03