我使用Excel通过对Notes服务器的VBA调用,根据Notes数据库中的数字绘制财务结果。它实际上是一个实时的更新"程序。 代码开始了:
Set Session = CreateObject("Lotus.NotesSession") 'Start a session to notes
Call Session.Initialize
Set nam = Session.CreateName(Session.UserName)
但我没有明确指示会话结束。我是不是该?我甚至可以这样做吗?
我喜欢几次微调之后整个事情变慢了,但这可能是其他事情!
如果没有明确关闭它会使会话保持打开状态,如何重新连接它(不再登录)?
答案 0 :(得分:0)
您需要的方法是 Session.Close
是的,user2864740非常正确:你必须明确地将对象设置为Nothing。
此外,我建议你关闭Session创建的每一个对象,将它们设置为Nothing:你不应该假设任何对象在超出范围时被解雇和清理 - 如果它们中的任何一个都处于活动状态,它可以保持对父对象的引用,使会话保持活动状态,并且无法访问您关闭它的尝试。
如果您没有明确关闭会话,并且在您丢弃了指向它的每个对象变量后它仍然处于打开状态,则可能是VBA无法触及的。
如果某些对象已经在运行,可以通过GetObject()调用来获取这些对象,但Lotus Notes会话对象不支持该接口。
下一步是使用API调用来枚举正在运行的进程,按名称选择Lotus Notes会话PID并终止进程
使用' Process' API调用是WMI脚本,MSDN在此处有相关调用的VBScript列表:
https://msdn.microsoft.com/en-us/library/aa394599%28v=vs.85%29.aspx
这比API调用更安全,但您仍然应该将此视为最后的手段:它可能会终止您现有的邮件会话,这就是为什么任务管理器(您的UI用于枚举进程和终止PID)的原因为您提供有关未保存工作和系统不稳定性的警告。