変更履歴の中で”変更”を認識しコメントする

変更履歴の定数の中に、削除、挿入と置換があります。仕事柄よくワードの変更履歴の記録機能はよく使いますが、実はこの”置換”というものを一度も見たことがありません。置換があればいのですが、現状は”削除”と”挿入”が同じ位置に記録されていると変更として取り扱っているようです。まぁ削除と挿入を順にやっていけば変更履歴通りになるので特に問題はありませんが。。。

よくある要望として、削除と挿入が同じ位置に指示されているものを変更として明記したいといわれます。そこでベースの基本形を以下に示します。

Option Explicit

Sub macro1()
   Dim cntRev As Revision, nextRev As Revision
   Dim i  As Integer
   
   i = 1
   Do While i < ActiveDocument.Revisions.Count
      Set cntRev = ActiveDocument.Revisions(i)
      Set nextRev = ActiveDocument.Revisions(i + 1)
    
      If cntRev.Type = wdRevisionDelete _
         And nextRev.Type = wdRevisionInsert _
         And cntRev.Range.End = nextRev.Range.Start Then
       
         AddChangeComment deleteRev:=cntRev, insertRev:=nextRev
      ElseIf cntRev.Type = wdRevisionInsert _
         And nextRev.Type = wdRevisionDelete _
         And cntRev.Range.End = nextRev.Range.Start Then
         
         AddChangeComment deleteRev:=nextRev, insertRev:=cntRev
      Else
         i = i + 1
      End If
  Loop

End Sub

Private Sub AddChangeComment(deleteRev As Revision, insertRev As Revision)
   Dim tmpText As String
   Dim tmpStart As Integer, tmpLen As Integer
         
   With ActiveDocument
    
     tmpText = insertRev.Range.Text
     tmpStart = deleteRev.Range.Start
     tmpLen = Len(deleteRev.Range.Text)
     deleteRev.Reject
     insertRev.Reject
     .Comments.Add _
       Range:=.Range(tmpStart, tmpStart + tmpLen), _
       Text:="変更" & vbCrLf & tmpText
   End With

End Sub

補足

置換の編集を行った時に、削除と挿入が並びます。なので、変更履歴のタイプが”削除-挿入”または”挿入-削除”で並んでおり、前方の変更履歴の終了位置と後方の変更履歴の開始位置が一致している場合は、置換と判断できるでしょう。上記の例では変更前に変更を指示するコメントを挿入しています。何も考えずに処理を組む際についついFor文で作りたくなりますが、変更履歴は承認か元に戻すとオブジェクトがなくなってしますので、Do文を使いオーバーフローを回避する必要があります。