2016-10-13 2 views
2

Я пытаюсь написать макрос, который поможет мне исправить научные статьи после того, как я закончу их редактирование, найдя и выделив некоторые распространенные ошибки пунктуации и интервалов (например, двойные пробелы, неправильный интервал вокруг знаков препинания и т. д.). Я использую Word 2010.VBA - Использование .Find в MS Word при изменении дорожки на

Следующий код работает должным образом для документов Word, у которых нет изменений Track. В нем освещаются экземпляры строк, содержащихся в TargetList в красном:

Sub HighlightTargets2() 
Dim range As range 
Dim i As Long 
Dim TargetList 

TargetList = Array(" ", " ,", " .", " ?", " :", " ;", " -", " –", " —", "- ", "– ", "— ", ",,", "..", "::", ";;", "??", ",.", ".,", ",?", "?,", "?.", ".?", ";:", ":;", ";,", ";.", ".;", ".;", "^$(", "^$)", "(^$", "^#(", "^#)", ")^ #", "(^#") ' put list of terms to find here 
For i = 0 To UBound(TargetList) 
Set range = ActiveDocument.range 
With range.Find 
.Text = TargetList(i) 
.Format = True 
.MatchCase = True 
.MatchWholeWord = False 
.MatchWildcards = False 
.MatchSoundsLike = False 
.MatchAllWordForms = False 
Do While .Execute(Forward:=True) = True 
range.HighlightColorIndex = wdRed 
Loop 
End With 
Next 
End Sub 

Проблема заключается в том, что мне нужно только, чтобы проверить наличие таких ошибок в FINAL зрения документа. Однако, когда я использую этот макрос, он будет принимать «удаленные» (как в, удаленные, но еще не принятые) символы, все еще присутствующие в документе.

Consider this example (ignore the yellow highlights). Как вы можете видеть на этой фотографии, я решил разбить исходное предложение, добавив период и удалив точку с запятой. Таким образом, в Final: Show Markup период insterted и удаленная точка с запятой отображаются в виде (.;). Даже если я запустил макрос, находясь в режиме «Final» (не «Final: Show Markup»), метод .Find примет такие «удаленные» символы, которые все еще находятся в тексте. Это означает, что мой код не работает, потому что происходит следующий эффект (как показано на следующем рисунке).

Wrong Highlight

Одним из возможных способов заключаются в открытии другого экземпляра слова, скопировать и вставить весь текст из файла (после выбора «Final», очевидно) и запустив макрос на новом экземпляре слова. Затем мне придется искать выделенные ошибки в новом экземпляре слова и вручную искать их (и исправлять их) с другой.

Есть ли способ, чтобы метод .Find выполнял поиск только по тексту, который появляется при просмотре документа в «Финальном» представлении и игнорирует текст, который был удален во время изменения треков?

ответ

0

Как Слово считается отслеживаемые изменения, чтобы быть частью документа до изменения не будут приняты, вы можете принять все отслеживаемые изменения перед выполнением кода:

Private Sub AcceptAllChanges() Dim Стрый как объект

For Each stry In ActiveDocument.StoryRanges 
    If stry.Revisions.Count >= 1 Then _ 
    stry.Revisions.AcceptAll 
Next 

End Sub

+0

Спасибо, однако, я должен отправить эти файлы без принятия изменений, чтобы исходный автор мог видеть мои исправления. –

Смежные вопросы