VBA Word - выделить все неосновные латинские символы

Я пытаюсь написать код, который будет выделять все неосновные латинские символы в документе Word (например, все символы, не являющиеся буквенно-цифровыми, а также некоторые символы, такие как «.», «(», «)», «? ", "/", и т.д.)

Этот код работает, но занимает слишком много времени для того, чего я пытаюсь достичь. Он работает, выделяя весь документ, а затем удаляя выделение из «хороших» символов, найденных в массиве, оставляя выделенными неосновные латинские символы.

Sub HighlightNonStandardCharacters()

  Application.ScreenUpdating = False

Dim MyRange As Range
Dim i As Long
Dim NormalCharacters

NormalCharacters = Array(" ", "!", Chr(34), "#", "$", "%", "&", "'", "(", ")", "*", "+", ",", "-", ".", "/", "0", "1", "2", "3", "4", "5", "6", "7", "8", "9", ":", ";", "<", "=", ">", "?", "@", "A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z", "[", "\", "]", "^", "_", "`", "a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z", "{", "|", "}", "~", Chr(13), "¶")

' highlights all document text 
ActiveDocument.Range.HighlightColorIndex = wdTurquoise

For i = 0 To UBound(NormalCharacters)
Set MyRange = ActiveDocument.Range
With MyRange.Find
.Text = NormalCharacters(i)
.Format = True
.MatchCase = True
.MatchWholeWord = False
.MatchWildcards = False
.MatchSoundsLike = False
.MatchAllWordForms = False

Do While .Execute(Forward:=True) = True
' removes highlighting from the “standard” characters leaving “non-standard” characters highlighted 
MyRange.HighlightColorIndex = wdAuto
Loop
End With
Next
  Application.ScreenUpdating = True

End Sub

Мне было интересно, есть ли более быстрый способ выделить все символы не в массиве или другой способ достижения цели.

Любые идеи были бы хорошы.


person BiblioPhillip    schedule 23.06.2015    source источник
comment
вы можете попробовать использовать встроенную функцию find MS Word. Вы можете попробовать использовать wildcard pattern, чтобы указать, какие символы следует выделить (например, [!0-9a-zA-Z], чтобы выделить все, кроме цифр и букв). Для получения дополнительной информации перейдите по этой ссылке и выполните поиск в Google.   -  person Kazimierz Jawor    schedule 23.06.2015


Ответы (1)


Спасибо, Казимеж Явор.

Это именно то, что мне было нужно. Так быстрее и проще. Я не совсем понимал, насколько мощным может быть использование подстановочных знаков в поиске поиска.

Вот что я придумал:

Sub HighlightNonBasicLatinCharacters()
Options.DefaultHighlightColorIndex = wdTurquoise
Selection.Find.ClearFormatting
Selection.Find.Replacement.ClearFormatting
Selection.Find.Replacement.Highlight = True
    With Selection.Find
    .Text = "[! -~¶]"
    .Replacement.Text = "^&"
    .Forward = True
    .Wrap = wdFindContinue
    .Format = True
    .MatchCase = False
    .MatchWholeWord = False
    .MatchAllWordForms = False
    .MatchSoundsLike = False
    .MatchWildcards = True
End With
Selection.Find.Execute Replace:=wdReplaceAll
End Sub
person BiblioPhillip    schedule 23.06.2015