エディタによる変更の検索(Microsoft Word)
サブスクライバーの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に適用されます。