Как сохранить возвращаемое значение из Selction.Find.Execute в логическую переменную. Это мой фрагмент кода, и я получаю ошибку компиляции для "myBool = Selection.Find.Execute Replace:=wdReplaceOne"
Dim myBool As Boolean
myBool = True
Do While myBool
Selection.Find.Text = "myText"
Selection.Find.Replacement.Text = replacementText //More logic to change this variable not shown
myBool = Selection.Find.Execute Replace:=wdReplaceOne
Loop
По сути, у меня есть цикл для поиска и замены, но я пытаюсь остановить цикл, когда больше не существует текстов для поиска.
Если вы хотите использовать его как функцию (которая что-то возвращает), вам нужно включить круглые скобки.
Dim myBool As Boolean
myBool = True
Do While myBool
Selection.Find.Text = "myText"
Selection.Find.Replacement.Text = replacementText //More logic to change this variable not shown
myBool = Selection.Find.Execute(Replace:=wdReplaceOne)
Loop
Тимоти также делает правильный вывод об использовании Replace:=wdReplaceAll
вместо этого. Если вы можете избежать использования цикла, это всегда будет лучше/быстрее, но это не вопрос.
Если вы установите:
.Wrap = wdFindStop
нет необходимости в тесте. Например:
Sub Demo()
Application.ScreenUpdating = False
Dim i As Long
With ActiveDocument.Range
With .Find
.ClearFormatting
.Replacement.ClearFormatting
.Text = InputBox("What is the Text to Find")
.Replacement.Text = ""
.Forward = True
.Format = False
.Wrap = wdFindStop
End With
Do While .Find.Execute
i = i + 1
'Do something
.Collapse wdCollapseEnd
Loop
End With
Application.ScreenUpdating = True
MsgBox i & " instances found."
End Sub
И, если вы хотите ограничить процесс выбранным диапазоном:
Sub Demo()
Application.ScreenUpdating = False
Dim i As Long, Rng As Range
Set Rng = Selection.Range
With Selection.Range
With .Find
.ClearFormatting
.Replacement.ClearFormatting
.Text = InputBox("What is the Text to Find")
.Replacement.Text = ""
.Forward = True
.Format = False
.Wrap = wdFindStop
End With
Do While .Find.Execute
If .InRange(Rng) = False Then Exit Do
i = i + 1
'Do something
.Collapse wdCollapseEnd
Loop
End With
Application.ScreenUpdating = True
MsgBox i & " instances found."
End Sub
Если вы используете
Replace:=wdReplaceAll
, цикл не нужен.