Как мне повторить блок кода до конца документа? - PullRequest
0 голосов
/ 14 июня 2019

У меня есть следующий код, который работает, но только один раз, я хотел бы перебрать его до конца документа.

Sub AddBrackets()
    Dim iCount As Integer
    iCount = 1
    Selection.Find.ClearFormatting
    Selection.Find.Font.Size = 6

    With Selection.Find
        .Text = ""
        .Replacement.Text = "^&"
        .Forward = True
        .Wrap = wdFindContinue
        .Format = True
    End With

    Selection.Find.Execute
    While Right(Selection.Text, 1) = " " Or _
            Right(Selection.Text, 1) = Chr(13)

        Selection.MoveLeft Unit:=wdCharacter, count:=1, _
            Extend:=wdExtend
        iCount = iCount + 1
    Wend

    Selection.InsertAfter "]"
    Selection.InsertBefore "["
    Selection.MoveRight Unit:=wdCharacter, count:=iCount
    Beep
End Sub

Попытка реализовать процесс, как показано Freeflow, и в ответ на его комментарии. Это те, которые я пробовал ...

Do While .Find.Execute
    .Select
    '.MoveStartUntil CSet:="0123456789", count:=wdBackward
    '.MoveStartUntil CSet:="0123456789", count:=wdForward
    '.MoveStart wdCharacter, -1
    .MoveStartWhile cset:="123456789", count:=-1
    '.MoveStartWhile cset:=Chr$(13) Or " ", count:=wdBackward
    '.MoveEndWhile CSet:=Chr$(13), count:=wdBackward
    .InsertAfter "]"
    .InsertBefore "["
    .MoveStart unit:=wdCharacter, count:=.Characters.count
    .Select
Loop

Изменения, внесенные в код. Кажется, ни одно из этих изменений не работает

1 Ответ

0 голосов
/ 14 июня 2019

Ваш запрос является обычной операцией в Word. Найдите что-то и затем выполните операцию, которая не является частью функции поиска / замены.

Следующий код делает то, что вы просите. Вы заметите, что все может быть сделано в слове. Объектная модель Word довольно мощная и гибкая, и на нее уходит некоторое время, чтобы ознакомиться с тем, что доступно. К сожалению, вы не получите этого, если просто прочитаете записанные макросы, вам придется копаться в объектной модели и много использовать F1.

Если вам нужен код, чтобы начать с выбора, а затем проработать оставшуюся часть документа, вам придется изменить приведенный ниже код.

Цикл do использует тот факт, что на данном этапе текущим диапазоном является текст, найденный .execute.

Public Sub search()

Const REPLACEMENT_TEXT                      As String = "^&"
Const FIND_TEXT                             As String = vbNullString

    With ActiveDocument.Content

        With .Find

            .ClearFormatting
            .Font.Size = 6
            .text = FIND_TEXT
            .Replacement.text = REPLACEMENT_TEXT
            .Forward = True
            .Wrap = wdFindStop
            .Format = True

        End With

        Do While .Find.Execute

            '.Select
            .MoveStartWhile cset:=Chr$(13) & " ", Count:=wdBackward
            .InsertAfter "]"
            .InsertBefore "["
            .MoveStart unit:=wdCharacter, Count:=.Characters.Count
            '.Select

        Loop

    End With

    Beep

End Sub
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...