Причина, по которой код в вопросе не находит условия поиска, как ожидалось:
Методы Collapse
, а затем Find.Execute
находятся в цикле до получения первого результата.Поскольку .Execute
также находится в блоке With
, предшествующем циклу, Find
выполняется дважды, таким образом маскируя первое вхождение поискового термина.
Кроме того:
1) ПредпочтительноДля поиска следует использовать конкретный Range
, а не весь документ (objDocx.Range
).Это связано с «свертыванием» - оно работает более надежно, когда есть конкретный объект Range
.
2) Не не используйте Find.Wrap = wdFindContinue
, как предлагается в комментариях.wdFindStop
(как в коде в вопросе) правильно при использовании Find
в цикле.wdFindContinue
часто приводит к «бесконечному циклу», поскольку Word снова запускается в начале документа, и снова ...
3) Возможно (лучше) установить объект Document
, когдафайл открывается (или создается), а не полагается на ActiveDocument
на втором шаге:
Set objDocx = Documents.Open dlgFile.SelectedItems(nDocx)
Вот часть кода, которая имеет отношение к Find - я пропустилчасти Excel, чтобы было легче читать
Dim objDocx As Word.Document
Dim rngFind As Word.Range
Set objDocx = Documents.Open dlgFile.SelectedItems(nDocx)
Set rngFind = objDocx.content
With rngFind
With .Find
.ClearFormatting
.Replacement.ClearFormatting
.Text = "[0-9]{5}"
.Replacement.Text = ""
.Forward = True
.wrap = wdFindStop
.Format = False
.MatchWildcards = True
.Execute
End With
Do While .Find.Found
If .Text <> "" Then
ObjWorksheet.Cells(i, 1) = Left(.Text, 8)
ObjWorksheet.Cells(i, 2) = dlgFile.SelectedItems(nDocx)
Else
i = i - 1
End If
i = i + 1
.Collapse wdCollapseEnd
.Find.Execute
Loop
End With