替换注释范围跨越的文本(Word)

时间:2016-04-12 09:30:52

标签: ms-word word-vba office-automation

我有一个带有评论的Word文档

Ms Word Document with comments

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

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

我得到的结果如下:

Ms Word Document with comments

在替换文本时,有没有办法保留评论的范围?

1 个答案:

答案 0 :(得分:2)

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

以下代码有效。让我失望了很长一段时间的事实是,Word显然不尊重评论对象。如果我将一个注释设置为一个变量,然后插入一个新注释,并在原始注释之前插入/索引新注释,则新注释将替换对象变量中的原始注释。因此,在下面的代码中,cmtOrig实际上包含刚添加的注释,而不是原始注释。因此,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