Подписчик Дорис Белл спросила, есть ли способ в Word 2000 найти все изменения, внесенные определенным редактором в документ, в котором включено отслеживание изменений. Быстрым ответом, конечно же, было бы обновление до Word 2002, поскольку эта возможность доступна прямо на панели инструментов Reviewing.

Word 97 и Word 2000 — это совсем другая история — там у вас есть только возможность просматривать или не просматривать все отслеживаемые изменения. При желании можно устранить недостаток, создав макросы, позволяющие искать изменения в конкретном редакторе. Начните с создания пользовательской формы в редакторе VBA, выполнив следующие общие шаги:

  1. Откройте редактор VBA, нажав Alt + F11.

  2. Выберите UserForm в меню Insert. В редакторе отображается пустая форма пользователя.

  3. С помощью панели инструментов разместите элемент управления Label в форме рядом с левой частью формы.

  4. В свойствах только что размещенного элемента управления Label измените свойство Caption на «Автор» (без кавычек).

  5. Используя панель инструментов, поместите элемент управления ComboBox справа от метки, размещенной на шаге 3.

  6. В свойствах элемента управления ComboBox измените свойство Name на «cboAuthor» (без кавычек).

  7. С помощью Toolbox разместите на форме элемент управления CommandButton. Это может быть по нижнему краю формы или по правому краю; это зависит от вас.

  8. В свойствах элемента управления CommandButton измените свойство Name на «cmdFindNext» (без кавычек).

  9. В свойствах элемента управления CommandButton измените свойство Caption на «Найти» (без кавычек).

  10. Используя панель инструментов, поместите в форму еще один элемент управления CommandButton.

Это должно быть либо справа от другого элемента управления CommandButton, либо чуть ниже него.

  1. В свойствах элемента управления CommandButton измените свойство Name на «cmdExit» (без кавычек).

  2. В свойствах элемента управления CommandButton измените свойство Caption на «Exit» (без кавычек).

  3. Измените размер вашей общей формы для желаемого внешнего вида.

Теперь ваша форма заполнена, и все, что вам нужно сделать, это добавить программный код, который будет использовать эти элементы управления. Убедитесь, что вы выбрали всю форму, а затем нажмите 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), я подготовил специальную страницу, содержащую полезную информацию.

link: / wordribbon-WordTipsMacros [Щелкните здесь, чтобы открыть эту специальную страницу в новой вкладке браузера].

WordTips — ваш источник экономичного обучения работе с Microsoft Word.

(Microsoft Word — самая популярная программа для обработки текстов в мире.) Этот совет (1303) относится к Microsoft Word 97, 2000 и 2002.