宏来反转Word中跟踪的更改?

时间:2014-02-14 16:59:32

标签: vba ms-word word-vba

我的很多工作涉及谈判技术合同,行业惯例是双方互相发送标记的MS Word文件,显示他们喜欢的变化。这通常会在达成一致之前多次发生。

通常一个段落会返回许多插入/删除,我们不想接受。同样,惯例是,即使拒绝这些更改也需要标记,因此现在必须将每个插入(蓝色文本)标记为删除(红色删除),反之亦然。

有谁知道可以做到这一点的宏?或者知道如何写一个?我花了几个小时在网上搜索并试图自己编写代码,但我无处可去!

我认为最简单的方法是将 wdRevisionDelete 中的每个 Revision Revision.Type 属性更改为 wdRevisionInsert (反之亦然),但这似乎是一个只读属性。

我已经尝试将已删除的文本分配给字符串,接受更改,然后插入它,但无法让它在正确的位置。我也找不到如何删除插入的文本,因此无法在方程的另一边找到任何地方。

有办法做到这一点吗?理想情况下,我可以选择一些文本,运行宏,并让每个修订版“翻转”。听起来很简单,但我找不到办法。老老实实可以节省我每月的工作时间,所以如果有人能提供帮助,我将非常感激。

提前致谢! 詹姆斯

1 个答案:

答案 0 :(得分:1)

通常我不回答没有代码的问题,但这看起来很有趣。

这对我有用(在跑步前选择你想要的范围):

EDIT2:现在可以处理相邻的修改而无需添加额外的文字

Sub FlipDeletesAndInserts()

    Dim rng As Range, rev As Revision, rngRev As Range
    Dim colDel As New Collection, colIns As New Collection
    Dim step As Long, txt As String

    If ActiveDocument.TrackRevisions Then
        Debug.Print "Tracked..."
    Else
        MsgBox "Track changes is not on!"
        Exit Sub
    End If

    Set rng = Selection.Range 'operate on the selected text

    'Collect all of the revisions before changing anything,
    '  otherwise the new changes also will be processed!
    For Each rev In rng.Revisions
        If rev.Type = wdRevisionDelete Then colDel.Add rev
        If rev.Type = wdRevisionInsert Then colIns.Add rev
    Next rev

    For Each rev In colIns
        Set rngRev = rev.Range
        Debug.Print "Inserted:", rngRev.Text
        rev.Accept    'accept the new text
        rngRev.Delete '...then delete it
    Next rev

    For Each rev In colDel
        Set rngRev = rev.Range
        'EDIT: grab the text before accepting...
        txt = rngRev.Text
        Debug.Print "Deleted:", txt
        rev.Accept 'EDIT:added
        'insert the same deleted text as an insert
        '  immediately after the deletion
        rngRev.InsertAfter txt
    Next rev

End Sub

之前和之后:

enter image description here