订阅者Doris Bell问在Word 2000中是否有一种方法可以在打开“修订”的文档中找到特定编辑器所做的所有更改。当然,快速的答案是升级到Word 2002,因为可以从“审阅”工具栏立即使用此功能。

但是,Word 97和Word 2000是一个不同的故事,您只能查看或不查看所有跟踪的更改。如果需要,可以通过创建允许您通过特定编辑器搜索更改的宏来解决缺陷。首先按照以下常规步骤在VBA编辑器中创建用户表单:

。通过按Alt + F11来显示VBA编辑器。

。从插入菜单中选择用户窗体。在编辑器中将显示一个空白的用户表单。

。使用工具箱,将Label控件放置在窗体中靠近窗体左侧的位置。

。在新放置的Label控件的“属性”中,将“标题”属性更改为“作者”(不带引号)。

。使用工具箱,将ComboBox控件放置在您在步骤3中放置的标签的右边。 。在ComboBox控件的“属性”中,将“名称”属性更改为“ cboAuthor”(不带引号)。

。使用工具箱,在窗体上放置一个CommandButton控件。可以沿着表单的底部边缘,也可以沿着右侧边缘。它是由你决定。

。在“命令按钮”控件的“属性”中,将“名称”属性更改为“ cmdFindNext”(不带引号)。

。在命令按钮控件的属性,将标题属性更改为“查找”(不带引号)。

。使用工具箱,在窗体上放置另一个CommandButton控件。

它应该在另一个CommandButton控件的右边,或者在它的下面。

。在“命令按钮”控件的“属性”中,将“名称”属性更改为“ cmdExit”(不带引号)。

。在命令按钮控件的属性,将标题属性更改为“退出”(不带引号)。

。调整您的整体形状以达到所需的外观。

现在,您的表单已经完成,您所需要做的就是添加将利用这些控件的编程代码。确保选择整个表单,然后按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

以后运行新用户表单时,将为您提供选择编辑器并查找该编辑器进行的下一个编辑的方法。这样一来,您一次只能找到一个编辑,而不必查看特定编辑器的所有编辑(就像在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_网站上的任何其他页面)中描述的宏,我准备了一个包含有用信息的特殊页面。

链接:/ wordribbon-WordTipsMacros [点击此处在新的浏览器标签中打开该特殊页面]。

_WordTips_是您进行经济有效的Microsoft Word培训的来源。

(Microsoft Word是世界上最流行的文字处理软件。)本技巧(1303)适用于Microsoft Word 97、2000和2002。