Вот одна из возможностей сравнить список терминов с найденным диапазоном.
Зацикливание массива для каждого «попадания» возможно, хотя и отнимает много времени. Вместо этого можно сравнить найденный диапазон со списком, используя Instr
. Возвращает 0, если найденный диапазон отсутствует в строке.
Для того, чтобы это работало, найденный диапазон должен быть расширен, чтобы охватить все слово, поэтому конечная точка диапазона расширяется до тех пор, пока не будет найден пробел.
Если вам ничего не нужно делать, если в списке найден термин, вы, конечно, можете пропустить часть кода Else
фрагмента кода.
range.Collapse wdCollapseEnd
устанавливает начальную точку для следующего цикла Find после найденного термина - в противном случае цикл будет повторяться бесконечно для одного и того же "pre".
Я изменил имя переменной с range
на rng
- в VBA всегда плохо использовать зарезервированное слово (имя объекта, метода или свойства, принадлежащего Word или VBA) в качестве переменной название. Также обратите внимание на включение .Wrap = wdFindStop
- это важно, так как в противном случае код мог бы продолжиться снова с начала документа.
Sub NeedPrefix()
Dim rng As Range
Dim i As Long
Dim TargetList
Dim Exceptions As String
Dim theException As String
TargetList = Array(" pre")
Exceptions = "prepare preparation present presentation presented prepared pretense pretend"
For i = 0 To UBound(TargetList)
Set rng = ActiveDocument.Content
With rng.Find
.Text = TargetList(i)
.Format = False
.Wrap = wdFindStop
.MatchCase = False
.MatchWholeWord = False
.MatchWildcards = False
.MatchSoundsLike = False
.MatchAllWordForms = False
Do While .Execute(Forward:=True) = True
Debug.Print "Characters moved: " & rng.MoveEndUntil(" " & Chr(13))
If InStr(Exceptions, rng.Text) = 0 Then
ActiveDocument.Comments.Add rng, "Is the use of a prefix appropriate?"
Else
theException = Mid(Exceptions, InStr(Exceptions, rng.Text))
theException = Mid(theException, 2)
theException = Left(theException, InStr(theException, " ") - 1)
Debug.Print "An exception was found: " & theException
End If
rng.Collapse wdCollapseEnd
Loop
End With
Next
End Sub