複数の Word ファイルを 1 つに結合しようとしています。MS Excel の VBA ルーチン内でこれを行っています。Wordファイルはすべて「files」という名前のフォルダーにあり、その1つ上のフォルダーに新しいファイル「combinedfile.docx」を作成したいと考えています。私が直面している問題は、ファイルをマージした後に Word プロセスがどのように動作するか (VBA 関数の実行後に終了するかどうか) に関するものです。一部のマシンでは、このプロセスは正常に機能しますが (ページ 2 と最後のページが空白であることを除いて)、一部のマシンでは、マージされたドキュメントに空白のページが含まれ、プロセス マネージャーは VBA 関数によって開始された Word プロセスをまだとして表示します。ランニング。
私は VBA プログラミングに慣れていません。下のコードでわかるように、開いているドキュメントを閉じて、開いている Word プロセスを終了する正しい方法がわかりません。誰かが私がやったことを見て、この問題を解決する方法を提案できれば、それは非常に役に立ちます.
これが複数の Word ファイルをマージする正しい方法であるかどうかも知りたいです。より良い方法があれば、私に知らせてください。
'the flow:
' start a word process to create a blank file "combinedfile.docx"
' loop over all documents in "files" folder and do the following:
' open the file, insert it at the end of combinedfile.docx, then insert pagebreak
' close the file and exit the word process
filesdir = ActiveWorkbook.Path + "\" + "files\"
thisdir = ActiveWorkbook.Path + "\"
singlefile = thisdir + "combinedfile.docx"
'if it already exists, delete
If FileExists(singlefile) Then
SetAttr singlefile, vbNormal
Kill singlefile
End If
Dim wordapp As Word.Application
Dim singledoc As Word.Document
Set wordapp = New Word.Application
Set singledoc = wordapp.Documents.Add
wordapp.Visible = True
singledoc.SaveAs Filename:=singlefile
singledoc.Close 'i do both this and the line below (is it necessary?)
Set singledoc = Nothing
wordapp.Quit
Set wordapp = Nothing
JoinFiles filesdir + "*.docx", singlefile
Sub JoinFiles(alldocs As String, singledoc As String)
Dim wordapp As Word.Application
Dim doc As Word.Document
Set wordapp = New Word.Application
Set doc = wordapp.Documents.Open(Filename:=singledoc)
Dim filesdir As String
filesdir = ActiveWorkbook.Path + "\" + "files\"
docpath = Dir(alldocs, vbNormal)
While docpath ""
doc.Bookmarks("\EndOfDoc").Range.InsertFile (filesdir + docpath)
doc.Bookmarks("\EndOfDoc").Range.InsertBreak Type:=wdPageBreak
docpath = Dir
Wend
doc.Save
doc.Close
Set doc = Nothing
wordapp.Quit
Set wordapp = Nothing
End Sub