我有一个应用程序,我需要合并几个几乎相同的文件,这些文件已发送给多个用户并收到了一些细微的更改和评论。文档相当大(500K - 1M),可以包含表格和嵌入图形。这样做的目的是将来自不同用户的更改和评论合并到一个文档中,跟踪谁做了什么或说了什么。
这是使用Application.Merge
的以下程序。
Public Sub runMerge(files As String)
Dim i As Integer
Dim v() As String
v = Split(files, vbCr)
Word.Application.ScreenUpdating = False
Word.Documents.Open fileName:=v(0), ReadOnly:=False, addtorecentfiles:=False
For i = 1 To UBound(v)
ActiveDocument.Merge fileName:=v(i), _
MergeTarget:=wdMergeTargetCurrent, _
DetectFormatChanges:=True, _
UseFormattingFrom:=wdFormattingFromCurrent, _
addtorecentfiles:=False
DoEvents
Next i
Word.Application.ScreenUpdating = True
Word.Application.ScreenRefresh
ActiveDocument.SaveAs2 "Merge " & Replace(Now, ":", "."), , , , False
End Sub
代码显式打开第一个文件,然后在循环中合并剩余的文档。除了有点脆弱之外,只要第一个文档被明确打开,它就能正常工作。
合并后,我使用SaveAs2
新的非限定文件名(即没有显式目录)。这很有效。
但是,如果我尝试使用SaveAs2
将文件放在不同的目录中,例如
ActiveDocument.SaveAs2 "C:\.....\Merge " & Replace(Now, ":", "."), , , , False
合并后,结果文档不会再次出现在屏幕上。此外,当稍后明确打开时,文档会以某种方式损坏,格式奇怪,在一种情况下,一些文本以橙色显示。 Word 2013和2016中已出现此行为。
除了将文档保存在任何默认目录(我的文档中,我的文档)中,然后使用copy
和Kill
在VBA中显式移动文件,如果没有,如何在没有默认目录的情况下保存文件额外的一步?
答案 0 :(得分:0)
最后,我做了以下工作来解决保存问题。
使用超级简单的FileCopy VBA功能,我将合并组中的第一个文件复制到我希望合并文件结束的目录。
合并循环保持不变。
合并循环完成后,我使用了之前发布的帖子VBA word table copy loses data,ActiveDocument.Select
,然后是Selection.Collapse
。
ActiveDocument.Save
,而不是SaveAs