我有一个带有评论的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
我得到的结果如下:
在替换文本时,有没有办法保留评论的范围?
答案 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