2016-04-12 2 views
1

У меня есть документ Word, с комментариямиЗаменить текст, на котором комментарии области видимости пролеты (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

Есть ли способ сохранить область комментария при замене текста?

ответ

2

Лучшее, что я мог выяснить, это создать новый комментарий вокруг нового текста, удалив предыдущий комментарий. Я попытался изменить свойство Start Comment.Scope, но это не имеет никакого эффекта.

Следующий код работает. То, что меня давно отбросило, заключается в том, что Word, по-видимому, не чтит объект Comment. Если я поставлю комментарий для переменной, добавьте новый комментарий, а новый комментарий будет вставлен/проиндексирован перед оригиналом, а новый заменит оригинал в переменной объекта. Итак, в приведенном ниже коде cmtOrig фактически содержит только что добавленный комментарий, а не оригинал. Таким образом, cmtOrig.Delete фактически удаляет cmtNew, в результате оставшийся комментарий не содержит целевой диапазон. Но, похоже, он работает надежно, используя Индекс.

Единственное предостережение состоит в том, что вы теряете любое форматирование в комментарии.

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