Тема: VBA Find c циклом
Добрый день, уважаемые форумчане.
Вопрос в следующем.
Есть код, который ищет в Word циклом все значения в скобках к примеру [01tr01] и заменяет их из файла Эксель на значения. При использовании цикла Do while loop если ошибься в значении к примеру [01tr00] и Excel не находит этого значения, то получется бесконечный цикл.
Подскажите пожалуйста как можно по другому реализовать цикл, или обработать ненайденные значения.
Заранее спасибо.
Sub Find2()
Dim oFile, wsSh As Worksheet, Openbook, Book
Set wsh = CreateObject("WScript.Shell")
docs = wsh.SpecialFolders("Desktop") 'получение адреса рабочего стола
CurrentPath = ThisWorkbook.Path ' получение адреса текущей папки
Form = "Юр _форм _автозамена.doc"
Set obook = Workbooks.Open(docs & "\" & "crm_ui_frame(1)") ' имя книги по умолчанию
Dim oWord As Word.Application
Dim oDoc As Word.Document
Set oWord = CreateObject("Word.Application")
Set oDoc = oWord.Documents.Add(CurrentPath & "\" & Form) 'запускаем форму
oWord.Visible = True
oWord.Tasks("Microsoft Word").Activate
'oWord.Application.ScreenUpdating = False
' thisdocument.Activate
Set myRange = oDoc.Content
myRange.Find.ClearFormatting
With myRange.Find
.Text = "[[]?*[]]"
.Forward = True
.Wrap = wdFindContinue
.Format = False
.MatchWildcards = True
.Execute
Do While .Found = True
'MsgBox myRange
.Execute
Codes = Mid(myRange, 2, Len(myRange) - 2)
Set sRow = Cells.Find(What:=Codes, After:=ActiveCell, LookIn:=xlFormulas, LookAt _
:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:= _
False, SearchFormat:=False)
If Not sRow Is Nothing Then
sRow = sRow.Row
Values = obook.Sheets(1).Range("B" & sRow).Value
oDoc.Content.Find.ClearFormatting
With oDoc.Content.Find
.Text = myRange
.Replacement.Text = Values
.Forward = True
.Format = False
.Execute Replace:=wdReplaceAll, Forward:=True
End With
Else:
myRange.HighlightColorIndex = wdRed
Exit Sub
End If
Loop
End With
End Sub