2016-04-12 14 views
1

ich ein Word-Dokument haben, mit Kommentaren, auf dem Umfang Spannweiten Kommentar (Word)

Ms Word Document with comments

Ich möchte programmatisch einen Text ersetzen, die auf einen Kommentar unterliegt:

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

das Ergebnis, das ich bekommen ist folgende:

Ms Word Document with comments

Gibt es eine Möglichkeit, den Umfang des Kommentars beizubehalten, während der Text ersetzt wird?

Antwort

2

Das Beste, was ich herausfinden konnte, ist, einen neuen Kommentar um den neuen Text zu erstellen und den vorherigen Kommentar zu löschen. Ich habe versucht, die Start Eigenschaft des Comment.Scope zu ändern, aber das scheint keinen Effekt zu haben.

Der folgende Code funktioniert. Was mich eine ganze Weile abwarf, ist die Tatsache, dass Word ein Kommentar-Objekt anscheinend nicht respektiert. Wenn ich einen Kommentar auf eine Variable setze, dann einen neuen Kommentar einfüge und der neue Kommentar vor dem Original eingefügt/indexiert wird, dann ersetzt der neue Kommentar das Original in der Objektvariablen. Im folgenden Code enthält CMTORIG den gerade hinzugefügten Kommentar, nicht das Original. Das Löschen von CmtOnig.Delete löscht CmtNew, sodass der verbleibende Kommentar den Zielbereich nicht enthält. Mit dem Index scheint es jedoch zuverlässig zu funktionieren.

Der einzige Vorbehalt ist, dass Sie jede Formatierung im Kommentar verlieren.

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