2016-11-18 6 views
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ドキュメントです。どのようにこの問題を解決するためのヒント?発生から余分なプロセスを防止するために

enter image description here

+2

。ループを実行するたびに、新しいプロセスが作成されます。コードの上部に 'Dim objBasic:Set objBasic = CreateObject(" Word.Basic ")と入力し、' With'ブロックを 'objBasic.SendKeys" {prtsc} "に置き換えます。ループの終わりの直後に 'Set objBasic = Nothing'と入力します。これにより、複数のプロセスが発生しないようにする必要があります。 – Lou

+0

@ルーありがとうございました。それが私の問題を解決しました。答えとして投稿したい場合は、私はそれを受け入れます –

答えて

1

、あなたのコードは次のようになります。あなたのスクリーンショットは、余分なプロセスを作成している取っている

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) 
Dim objBasic : Set objBasic = CreateObject("Word.Basic") 

' 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 
    objBasic.SendKeys "{prtsc}" 

    ' 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() 
    Set objBasic = Nothing 

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 
関連する問題