0
私は、ユーザーがループ内でスクリーンショットを取得してワードドキュメントに保存するのを支援するスクリプトを作成しています。Wordを終了します。Word.Applicationのメインプロセスを殺すことなく基本アプリケーションのプロセスを実行します。
私のコードは動作していますが、私が直面している問題は、スクリーンショットごとにWINWORD.EXE
プロセスを作成していてプロセスが強制終了されないということです。そのため、スクリプトを数回実行するか、私は手作業で殺さなければならない膨大な量のプロセスで終わるだろう。
これは私のスクリプトです:
Option Explicit
Dim strPath : strPath = WScript.ScriptFullName
Dim objFSO : Set objFSO = CreateObject("Scripting.FileSystemObject")
Dim objFile : Set objFile = objFSO.GetFile(strPath)
Dim strMainPath : strMainPath = objFSO.GetParentFolderName(objFile)
' Cleaning
Set objFile = Nothing
Set objFSO = Nothing
Dim objWord : Set objWord = CreateObject("Word.Application")
objWord.Visible = False
objWord.Documents.Open strMainPath & "\template\template.doc"
Const wdStory = 6
Const wdMove = 0
Dim objSelection : Set objSelection = objWord.Selection
objSelection.EndKey wdStory, wdMove
Dim execFlag : execFlag = True
Do While execFlag = True
Dim strPrint : strPrint = InputBox("Enter screenshot name","Screenshot Name", "")
With objSelection
.Font.Name = "Arial"
.Font.Size = "10"
.TypeText strPrint
End With
objSelection.TypeParagraph()
WScript.Sleep 5000
'Taking Screenshot using word object
With CreateObject("Word.Basic") 'This is the point where I create the processes that I'm unable to kill
.SendKeys "{prtsc}"
End With
' Paste in the screen shot
objWord.Selection.Paste
Dim intAnswer : intAnswer = MsgBox("Continue?", vbYesNo, "Printscreen")
If intAnswer = vbNo Then execFlag = False
objSelection.EndKey wdStory, wdMove
objSelection.TypeParagraph()
Loop
Dim strFileName : strFileName = ""
Do
strFileName = InputBox("Provide the file name","File Name", "")
Loop While strFileName = ""
objWord.ActiveDocument.SaveAs strMainPath & "\" & strFileName & ".doc"
objWord.ActiveDocument.Close
objword.Quit
Set objword = Nothing
Set objWord = CreateObject("Word.Application")
objWord.Visible = True
objWord.Documents.Open strMainPath & "\" & strFileName & ".doc"
Set objWord = Nothing
はこれらは私が参照してるプロセスです。それらのうちの1つが実際に自分のテンプレートを参照しているため、すべてのプロセスを単に殺すことはできません。これは、私がスクリーンショットを保存しているWordドキュメントです。どのようにこの問題を解決するためのヒント?発生から余分なプロセスを防止するために
。ループを実行するたびに、新しいプロセスが作成されます。コードの上部に 'Dim objBasic:Set objBasic = CreateObject(" Word.Basic ")と入力し、' With'ブロックを 'objBasic.SendKeys" {prtsc} "に置き換えます。ループの終わりの直後に 'Set objBasic = Nothing'と入力します。これにより、複数のプロセスが発生しないようにする必要があります。 – Lou
@ルーありがとうございました。それが私の問題を解決しました。答えとして投稿したい場合は、私はそれを受け入れます –