替换评论范围跨越的文本(Word)

Replace text on which comment scope spans (Word)

我有一个 Word 文档,里面有注释

我想以编程方式替换受评论影响的文本:

Sub ReplaceTextOfComments()
    For Each c In ActiveDocument.Comments
        If c.Range.Text = "BAR" Then
            c.Scope.Text = "H"
        End If
    Next c
End Sub

我得到的结果如下:

有没有办法在替换文本的同时保留注释的范围?

我能想到的最好办法是围绕新文本创建新评论,删除之前的评论。我确实尝试更改 Comment.Scope 的 Start 属性,但这似乎没有任何效果。

以下代码有效。让我失望了很长一段时间的事实是,Word 显然不支持 Comment 对象。如果我给一个变量设置一个Comment,然后插入一个新的注释,而新的注释在原来的inserted/indexed之前,那么新的注释就会替换对象变量中原来的。所以,在下面的代码中,cmtOrig 实际上包含了刚刚添加的 Comment,而不是原来的 Comment。所以这样做 cmtOrig.Delete 实际上删除了 cmtNew,结果是剩余的 Comment 不包含目标 Range。但它似乎确实使用索引可靠地工作。

但需要注意的是,您会丢失评论中的所有格式。

Sub ReplaceCommentRangeText()
    Dim rngCommentScope As word.Range
    Dim cmtOrig As word.Comment, cmtNew As Comment
    Dim cmtIndex As Long
    Dim rngTarget As word.Range

    Set cmtOrig = ActiveDocument.Comments(1)
    cmtIndex = cmtOrig.index
    Set rngCommentScope = cmtOrig.Scope
    rngCommentScope.Text = "C"
    Set cmtNew = ActiveDocument.Comments.Add(rngCommentScope, cmtOrig.Range.Text)
    'Debug.Print cmtNew.index, cmtIndex
    If cmtNew.index = cmtIndex Then
        ActiveDocument.Comments(cmtIndex + 1).Delete
    Else
        ActiveDocument.Comments(cmtIndex).Delete
    End If
End Sub