文档合并后立即保存文档的问题

时间:2018-02-12 10:05:32

标签: vba word-vba

我有一个应用程序,我需要合并几个几乎相同的文件,这些文件已发送给多个用户并收到了一些细微的更改和评论。文档相当大(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中已出现此行为。

除了将文档保存在任何默认目录(我的文档中,我的文档)中,然后使用copyKill在VBA中显式移动文件,如果没有,如何在没有默认目录的情况下保存文件额外的一步?

1 个答案:

答案 0 :(得分:0)

最后,我做了以下工作来解决保存问题。

  • 使用超级简单的FileCopy VBA功能,我将合并组中的第一个文件复制到我希望合并文件结束的目录。

  • 合并循环保持不变。

  • 合并循环完成后,我使用了之前发布的帖子VBA word table copy loses dataActiveDocument.Select,然后是Selection.Collapse

  • ActiveDocument.Save,而不是SaveAs