サブスクライバーのDorisBellは、Word 2000で、[変更の追跡]がオンになっているドキュメント内の特定のエディターによって行われたすべての変更を見つける方法があるかどうかを尋ねました。もちろん、この機能は[レビュー]ツールバーから直接利用できるため、簡単な答えはWord2002にアップグレードすることです。

ただし、Word97とWord2000は別の話です。追跡されたすべての変更を表示するか、表示しないかしかできません。必要に応じて、特定のエディターで変更を検索できるマクロを作成することで、欠陥に対処できます。次の一般的な手順に従って、VBAエディターでユーザーフォームを作成することから始めます。

。 Alt + F11を押して、VBAエディターを表示します。

。 [挿入]メニューから[ユーザーフォーム]を選択します。空白のユーザーフォームがエディターに表示されます。

。ツールボックスを使用して、フォームの左側近くにあるフォームにラベルコントロールを配置します。

。新しく配置されたLabelコントロールのプロパティで、Captionプロパティを「作成者」(引用符なし)に変更します。

。ツールボックスを使用して、手順3で配置したラベルのすぐ右側にComboBoxコントロールを配置します。

。 ComboBoxコントロールのプロパティで、Nameプロパティを “cboAuthor”(引用符なし)に変更します。

。ツールボックスを使用して、フォームにCommandButtonコントロールを配置します。これは、フォームの下端に沿って、または右端に配置できます。それはあなた次第です。

。 CommandButtonコントロールのプロパティで、Nameプロパティを “cmdFindNext”(引用符なし)に変更します。

。 CommandButtonコントロールのプロパティで、Captionプロパティを「検索」(引用符なし)に変更します。

。ツールボックスを使用して、フォームに別のCommandButtonコントロールを配置します。

これは、他のCommandButtonコントロールのすぐ右側、またはそのすぐ下にある必要があります。

。 CommandButtonコントロールのプロパティで、Nameプロパティを “cmdExit”(引用符なし)に変更します。

。 CommandButtonコントロールのプロパティで、Captionプロパティを「Exit」(引用符なし)に変更します。

。フォーム全体のサイズを変更して、目的の外観にします。

これでフォームが完成しました。必要なのは、これらのコントロールを利用するプログラミングコードを追加することだけです。フォーム全体を選択していることを確認してから、F7キーを押してコードウィンドウを表示します。すでにそこにコードがある場合(VBAがデフォルトのコードを提供する場合があります)、自由に削除してください。次に、次のコードをコードウィンドウに配置します。

Private Sub UserForm1_Initialize()

Dim oRevision As Revision     Dim bExists As Boolean

bExists = False

' Go to beginning of document     Selection.HomeKey Unit:=wdStory

' Loop through revisions and add authors     For Each oRevision In ActiveDocument.Revisions         If Me.cboAuthor.ListCount > 0 Then             For i = 1 To Me.cboAuthor.ListCount                 If Me.cboAuthor.List(i - 1) = oRevision.Author Then                     bExists = True                 End If             Next i

' If it doesn't already exist, add the author to list             If Not bExists Then                 Me.cboAuthor.AddItem oRevision.Author             End If

bExists = False         Else             ' Add first Author to the list             Me.cboAuthor.AddItem oRevision.Author         End If     Next oRevision End Sub

Private Sub cmdExit_Click()

Unload Me End Sub

Private Sub cmdFindNext_Click()



Dim iStart As Integer     Dim iEnd As Integer     Dim myRange As Range     Dim iRevisions As Integer     Dim iResponse As Integer     Dim bAuthorFound As Boolean

' Collapse the Selection so that we don't include selected text     Selection.Collapse wdCollapseEnd     Selection.MoveRight wdCharacter, 2

' Get the Range start and end positions     iStart = Selection.Range.Start     iEnd = ActiveDocument.Content.End     Set myRange = ActiveDocument.Range(Start:=iStart, End:=iEnd)



' Count total number of revisions within range     iRevisions = myRange.Revisions.Count

If iRevisions > 0 Then         ' Loop through all revisions in the range          ' selecting first one found         For i = 1 To iRevisions             If myRange.Revisions(i).Author = Me.cboAuthor.Text Then                 myRange.Revisions(i).Range.Select                 bAuthorFound = True                 Exit For             Else                 bAuthorFound = False             End If         Next i     End If

If Not bAuthorFound Then         ' Ask if they would like to start from the beginning         iResponse = MsgBox("Search from beginning?", vbYesNo, "Find Author")

If iResponse = vbYes Then             ' Go to top of document             Selection.HomeKey Unit:=wdStory             cmdFindNext_Click         Else             ' Exit             Unload Me         End If     End If End Sub

後で新しいユーザーフォームを実行すると、エディターを選択して、そのエディターによって行われた次の編集を見つける方法が表示されます。これにより、特定のエディターによるすべての編集を表示するのではなく、一度に1つの編集を検索できます(Word 2002の場合のように)。

あなたが取ることができる別のアプローチがあります。マクロを使用して、ドキュメントで行われたすべての編集を「プル」し、エディターによって新しいドキュメントに配置することができます。次のマクロは、この種のことを行う方法を示しています。結果のテーブルには、元のドキュメントで行われた編集のタイプも示されます。

Option Explicit

Private Sub ShowAuthorAndRevisions()

Dim sRevision As String     Dim oRev As Revision     Dim oDoc As Document     Dim oRng As Range

For Each oRev In ActiveDocument.Revisions         With oRev             sRevision = sRevision & .Author & vbTab _               & .Type & vbTab & .Range.Text & vbCrLf         End With     Next oRev

' Open a new document     Set oDoc = Documents.Add     With oDoc         .Range.InsertAfter sRevision         ' Convert the revisions to a table         .Range.ConvertToTable Separator:=wdSeparateByTabs         With .Tables(1)

' Sort the table by the author (i.e., the first column)

.Range.Sort             ' Add a new row to the beginning of the table             .Range.Rows.Add BeforeRow:=.Range.Rows(1)

With .Rows(1)

' insert column descriptions                 .Cells(1).Range.Text = "Author"

.Cells(2).Range.Text = "Revision Type"

.Cells(3).Range.Text = "Revision"

End With         End With         ' insert a paragraph mark above the table         Selection.SplitTable         ' Insert a legend to make reading the revision type easier         .Range.InsertBefore "Revision Type Legend:" & vbCrLf & _             "No Revision = 0 " & vbCrLf & _             "Revision Insert = 1 " & vbCrLf & _             "Revision Delete = 2 " & vbCrLf & _             "Revision Property = 3 " & vbCrLf & _             "Revision Paragraph Number = 4 " & vbCrLf & _             "Revision Display Field = 5 " & vbCrLf & _             "Revision Reconcile = 6 " & vbCrLf & _             "Revision Conflict = 7 " & vbCrLf & _             "Revision Style = 8 " & vbCrLf & _             "Revision Replace = 9 " & vbCrLf     End With End Sub

このマクロは、ドキュメント内のリビジョンごとに、リビジョンの作成者、タイプ、およびテキスト(存在する場合)を検索します。次に、マクロはすべてのリビジョンをテーブルに配置し、作成者の名前でテーブルを並べ替え、各リビジョンタイプを説明する小さな凡例を挿入します。

注:

このページ(または_WordTips_サイトの他のページ)で説明されているマクロの使用方法を知りたい場合は、役立つ情報を含む特別なページを用意しました。

_WordTips_は、費用効果の高いMicrosoftWordトレーニングのソースです。

(Microsoft Wordは、世界で最も人気のあるワードプロセッシングソフトウェアです。)このヒント(1303)は、Microsoft Word 97、2000、および2002に適用​​されます。