我正在尝试将许多 Word 文件合并为一个。我在 MS Excel 的 VBA 例程中执行此操作。Word 文件都在一个名为“files”的文件夹中,我想在上一层的文件夹中创建一个新文件“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