替换评论范围跨越的文本(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
我有一个 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