Поиск изменений редактором (Microsoft Word)
Подписчик Дорис Белл спросила, есть ли способ в Word 2000 найти все изменения, внесенные определенным редактором в документ, в котором включено отслеживание изменений. Быстрым ответом, конечно же, было бы обновление до Word 2002, поскольку эта возможность доступна прямо на панели инструментов Reviewing.
Word 97 и Word 2000 — это совсем другая история — там у вас есть только возможность просматривать или не просматривать все отслеживаемые изменения. При желании можно устранить недостаток, создав макросы, позволяющие искать изменения в конкретном редакторе. Начните с создания пользовательской формы в редакторе VBA, выполнив следующие общие шаги:
-
Откройте редактор VBA, нажав Alt + F11.
-
Выберите UserForm в меню Insert. В редакторе отображается пустая форма пользователя.
-
С помощью панели инструментов разместите элемент управления Label в форме рядом с левой частью формы.
-
В свойствах только что размещенного элемента управления Label измените свойство Caption на «Автор» (без кавычек).
-
Используя панель инструментов, поместите элемент управления ComboBox справа от метки, размещенной на шаге 3.
-
В свойствах элемента управления ComboBox измените свойство Name на «cboAuthor» (без кавычек).
-
С помощью Toolbox разместите на форме элемент управления 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
Когда вы позже запустите свою новую пользовательскую форму, вам будет предложен способ выбрать редакторов и найти следующее изменение, сделанное этим редактором. Это позволяет вам находить по одному правке за раз, а не просматривать все правки, сделанные отдельным редактором (как вы можете в 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.