Я написал «простой» код для поиска цитат определенной длины в файле Word (который я в конечном итоге хочу отформатировать с использованием другого подпрограммы). Все части работали нормально по отдельности, но теперь поиск в основном пропускает строки, которые он должен найти в тексте, и, по-видимому, работает строки кода не по порядку.
Я пробовал режим прерывания и наблюдал за значением Selection
, и вот где он становится странным: он продолжает находить следующий экземпляр параметров поиска (выбирает в документе и изменяет значение Selection
) при запуске каждая строка кода, в том числе в пределах With Selection.Find
, до .Execute
!
Sub FindQuotesTest()
Dim quotevar As String, loopvar As Boolean
Findquote:
loopvar = False 'Doesn't seem necessary, added to try debugging
Selection.Collapse 'Not sure if this is necessary
Selection.Find.ClearFormatting
With Selection.Find
.MatchWildcards = True
.Text = ChrW(8220) & "*" & ChrW(8221) 'Any amount of text between an opening and a closing curly double quotation marks.
.Forward = True
.Wrap = wdFindStop 'To avoid a crash when reaching the end of the document
End With
Selection.Find.Execute
loopvar = Selection.Find.Execute
With Selection
.MoveStartWhile Cset:=ChrW(8220) 'Removes the opening quotation mark from selection
.MoveEndWhile Cset:=ChrW(8221), Count:=wdBackward 'Removes the closing quotation mark from selection
End With 'I need this for the further formatting and to count the text string
quotevar = Selection.Range
If Len(quotevar) < 157 Then 'Repeats the search if the quote isn't long enough.
If loopvar = True Then GoTo Findquote 'Prevents infinite loop when reaching the end of the document by relying on wdFindstop
End If
End Sub
В режиме разбиения это должно найти одну строку текста в двойных кавычках за раз, и переходить к следующему, только когда он достигает цикла GoTo
, и делать это, пока не достигнет строки с указанной длиной (следует перебрать .Find
несколько раз).
Когда я снова запускаю макрос, он должен найти следующий экземпляр длинной цитаты (кажется, он находит каждую вторую вместо этого. В моих предыдущих попытках макрос запускался только один раз и не находил следующий экземпляр при повторном запуске, что не происходит с этим кодом).
Причудливое поведение режима перерыва во времени отталкивает меня отсюда, так что я в растерянности. Любая помощь будет принята с благодарностью! Приветствия.