Word VBA Найти и выделить совпадения - PullRequest
3 голосов
/ 16 марта 2011

У меня есть коды ниже, которые уже работают, но все еще должны быть настроены. Это функция, которая находит совпадения для строки поиска с подстановочными знаками и выделяет события. Но я считаю, что это все еще можно сделать в одной строке, используя заменить все. Я перепробовал почти все, что мог придумать, и думаю, пришло время спросить экспертов об этом. Пожалуйста, покажи мне, как это можно сделать еще более коротким способом. Любая помощь будет оценена. Спасибо!

Sub findfunction()
If (findHL(activedocument.Range, "[aeiou]")) = True Then MsgBox "Highlight vowels Done", vbInformation + vbOKOnly, "Vowels Highlight Result"
End Sub

Function findHL(r As Range, s As String) As Boolean
Dim rdup As Range
Set rdup = r.Duplicate
rdup.Find.Wrap = wdFindStop

Do While rdup.Find.Execute(findtext:=s, MatchWildcards:=True) = True
   If (Not rdup.InRange(r)) Then Exit Do
   rdup.HighlightColorIndex = wdBlue
   rdup.Collapse wdCollapseEnd
Loop

findHL = True
End Function

Ответы [ 2 ]

2 голосов
/ 22 февраля 2012

очень глубоко спрятано в Google:

Options.DefaultHighlightColorIndex = wdYellow

Selection.find.HitHighlight( string ) 
0 голосов
/ 16 марта 2011

Мне удалось найти собственное решение, проведя несколько испытаний.Вот мое решение просто для ссылки на тех, кто может искать то же решение моей предыдущей проблемы:

Sub findfunction()
If (findHL(activedocument.Content, "[aeiou]")) = True Then MsgBox "Highlight vowels Done", vbInformation + vbOKOnly, "Vowels Highlight Result"
End Sub

Function findHL(r As Range, s As String) As Boolean
Options.DefaultHighlightColorIndex = wdBlue
r.Find.Replacement.highlight = True
r.Find.Execute FindText:=s, MatchWildcards:=True, Wrap:=wdFindContinue, Format:=True,  replacewith:="", replace:=wdReplaceAll
findHL = True
End Function

Простое, но оно урезало мой предыдущий код до нескольких строк.

...