如何让 Word 不修订标记结果未发生改变的字段更新?

如何让 Word 不修订标记结果未发生改变的字段更新?

我正在使用 Word 2010。据我所知,这个问题从一开始就存在于 Word 中。

当我在文档中创建字段时,当我强制更新该字段(例如,使用 F9 或右键单击菜单选项)或作为打开或打印文件的副作用时,该字段会更新。这一切都很好 - 这就是我使用字段的原因。当然,大多数时候(有时是大多数时候),字段更新不会导致结果文本发生变化。例如,{numpages} 或交叉引用或文件名可能保持不变。

不幸的是,如果我打开了修订跟踪,则每个字段更新都会标记旧结果被删除,并插入新值。即使值没有改变,也会发生这种情况。经过几次打开、关闭、打印、更新等操作后,您最终会得到如下所示的内容(由于编辑器的限制,我在此示例中使用了粗体而不是下划线)以进行交叉引用

请参阅章节2.3.42.3.42.3.42.3.4

恕我直言,如果结果文本没有改变,Word 不应该将其视为修订。如果有办法让 Word 首先做到这一点,我很想知道。

或者,如果有某种方法可以轻松地从我的文档中删除这些多余的(非)修订(同时保留所有“真实”修订),那将是解决我的问题的另一种方法。

谢谢,
Yosh

答案1

虽然这不是一个完整的解决方案,但您可以通过在更新前关闭跟踪的修订,然后在更新完成后重新打开它们来避免重复修订。您可以进一步将宏绑定到键盘快捷键,以自动执行这些步骤。

如果字段在打印前自动更新,恐怕这不会有太大帮助,但是你可以选择关闭该行为,方法是进入选项菜单,进入展示并取消勾选打印前更新字段

编辑:我编写了以下宏,该宏应从字段中删除此类不必要的修订。如果可能的话,可能需要一些速度改进。

Sub RemoveUnchangedFieldTrackedChanges()

    Dim oField As Field
    Dim oRevision As Revision

    For Each oField In ActiveDocument.Fields
        For Each oRevision In oField.Parent.Range.Revisions
            Select Case oRevision.Type
            Case wdRevisionInsert
                With oRevision
                    revisionText = .Range.Text

                        For Each iRevision In oField.Parent.Range.Revisions
                            Select Case iRevision.Type
                            Case wdRevisionDelete
                                With iRevision

                                If StrComp(revisionText, iRevision.Range, vbTextCompare) = 0 Then
                                    oRevision.Accept
                                    iRevision.Accept
                                End If

                            End With
                            End Select
                         Next iRevision

                        End With
                End Select
         Next oRevision
    Next oField
End Sub 

答案2

我最近意识到,我提出的问题的解决方案是根本不使用修订标记。相反,在我完成所有更改后,我使用“比较文件”来创建带有修订标记的文档版本。在进行比较时,我确保不选择字段比较设置下的选项:

在此处输入图片描述

因为我通常不关心格式化白色空间更改我也取消选择这些选项。最终结果(我通常选择创建一个新建文档) 为我提供一份包含显著变化且不包含不重要和分散注意力的(非)变化(如字段值)的文档。

相关内容