クライアント(9.0 Social Edition)上で実行されるスケジュールされたLotusScriptエージェントがあります。その目的の1つは、Word文書を開いてPDFが、それは本当に重要ではありません。ここでは、関連するコードスニペットはWord.Application(Office 2016)オブジェクトLS。
Declarations
Dim wrdApp as Variant
Sub Initialize
[Getting the usual Notes Session, Database, View values]
Set wrdApp = createObject("Word.Application")
wrdApp.visible = True
starthere:
'we check to see if there is anything that has been deferred
Set v = db.GetView("RIT")
strStatus = "Success"
Set doc = v.Getfirstdocument()
If (doc Is Nothing) Then Exit Sub
[Snip]
End Sub
Sub Terminate
wrdApp.visible = True
Dim quitCode As Variant
quitCode = 0
Call wrdApp.quit(quitCode)
Print "Quit called, waiting 3 seconds"
' Wait a couple seconds
Sleep(3)
Print "Done waiting, setting wrdApp to Nothing"
Set wrdApp=Nothing
Print "Exiting agent"
End Sub
だ私がいる問題は、私たちがオフィス2016にアップグレードするので、時にはエージェントが終了したことがないということです。ログには「待っている、wrdAppをNothingに設定する」が表示されますが、「終了エージェント」は表示されません。私はWordのウィンドウを開いたままにしていますが(もちろんドキュメントはありません)、タスクマネージャを見ると、CPUが0%、CPU時間が2〜3秒のWINWORD.EXEが表示されています。もちろん、陰謀に追加するだけでも、毎回このようなことは起こりません。そしてエージェントは決して終わらないので、私がゾンビのWordのインスタンスを殺すまで、他のすべてのスケジュールされたエージェントは止まってしまいます。私は私が見つけることができるすべての提案を試みました(あなたは、私がWordを見えるようにして、VariantをQuitのパラメータとして使うことに気がつくでしょう、そして、私もdesparationからsleep(3)を投げました) 。私たちはOffice 2010でこの問題を抱えていませんでした(エージェントコードがはるかに悲しい場合でも)。また、Word文書を実際に開くかどうかにかかわらず、問題が発生する可能性があります。解決策はありますか?またはO2010の唯一のオプションに戻っていますか?
単なるテスト:すべてのコードをInitialize Subに入れることができますか?私はTerminate Subでいくつかの悪い経験をしていましたが、コード終了前に終了しました... –
これは私が少しリファクタリングしたコードです。これは、Initializeから呼び出されたサブルーチンでWordのインスタンスを設定および解除するために使用されました。私は問題を抱え始めたとき、私は(終了に関連していないという意味。)このようにそれを書き直したリファクタリングが役立つ(または傷つける)なかったが、問題を、私はそれがこの方法をより良い流れ方が好き。 – Duston