Слово VBA Найти и двигаться дальше - PullRequest
0 голосов
/ 27 августа 2018

Вот моя проблема, я ищу ":" и набираю HTML-код с помощью VBA.Приведенный ниже код повторяет цикл на одном и том же ":" и не переходит к следующему, поскольку на самом деле я его не удаляю.Есть предложения?

Dim bFound As Boolean


bFound = True
Set r = ActiveDocument.Content

r.Find.ClearFormatting
Do While bFound
    With r.Find
        .Text = ":"
        .Replacement.Text = ":</b>"
        .Forward = True
        .Wrap = wdFindContinue
        .Format = False
        .MatchCase = True
        .MatchWholeWord = False
        .MatchWildcards = False
        .MatchSoundsLike = False
        .MatchAllWordForms = False
        bFound = .Execute(Replace:=wdReplaceOne, Forward:=True)
    End With

    If bFound Then
        r.Select
        Selection.HomeKey Unit:=wdLine
        Selection.TypeText Text:="<b>"
        Selection.EndKey Unit:=wdLine
        Selection.MoveRight
    End If
Loop

1 Ответ

0 голосов
/ 27 августа 2018

Есть две проблемы с кодом, которые в остальном весьма хороши:

  1. Он использует wdFindContinue для свойства Wrap, что означает, что Find будет перезапущен в началедокумент.Как правило, всегда используйте wdFindStop в коде.

  2. Необходимо переместить найденный диапазон за пределы этой точки, если искомый объект остается в документе.Это можно сделать с помощью Range.Collapse.Подумайте об этом, как о нажатии клавиши со стрелкой вправо на клавиатуре, когда у вас есть выделение: курсор помещается за пределы того, что было выделено.

Я изменил исходный код с помощью этихдва изменения, плюс я объявил переменную Range.То, что исходный код выполнялся без этого объявления, указывает, что Option Explicit не может быть в верхней части модуля кода.Намного лучше, если это там ...

Sub JumpBeyondFound()
    Dim r As Word.Range
    Dim bFound As Boolean

    bFound = True
    Set r = ActiveDocument.content

    r.Find.ClearFormatting
    Do While bFound
        With r.Find
            .Text = ":"
            .Replacement.Text = ":</b>"
            .Forward = True
            .wrap = wdFindStop
            .Format = False
            .MatchCase = True
            .MatchWholeWord = False
            .MatchWildcards = False
            .MatchSoundsLike = False
            .MatchAllWordForms = False
            bFound = .Execute(Replace:=wdReplaceOne, Forward:=True)
        End With

        If bFound Then
            r.Select
            Selection.HomeKey Unit:=wdLine
            Selection.TypeText Text:="<b>"
            Selection.EndKey Unit:=wdLine
            Selection.MoveRight
            r.Collapse wdCollapseEnd
        End If
    Loop
End Sub
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...