Word Макросы: Замена в текущей таблице и выделенных таблицах

Автор Anton, 21 декабря 2016, 13:50

Anton

Добрый день! Подскажите пожалуйста, вот есть такой макрос замены во всех таблицах.

Dim tbl As Table
    For Each tbl In ActiveDocument.Tables
        With tbl.Range.Find
            .Text = "123"
            .Replacement.Text = "321"
            .Forward = True
            .Wrap = wdFindStop
            .MatchWildcards = True
            .Execute Replace:=wdReplaceAll
        End With
    Next tbl

А как нужно его переделать, чтобы замена осуществлялась:
1. только в той таблице, где находится курсор
2. только в выделенных таблицах.

Мои действия такие в прикрепленном файле:
выделяю участок документа с Текст2 по Текст4. В выделенную область попадают таблицы 2 и 3. Необходимо запустить макрос, который произведет замену текста только в таблицах 2 и 3 (потому что только эти таблицы попали в выделенную область).

[вложение удалено администратором]

Администратор

Макрос
Sub Макрос()

    Dim tbl As Table
   
    For Each tbl In Selection.Tables
        With tbl.Range.Find
            .Text = "123"
            .Replacement.Text = "321"
            .Forward = True
            .Wrap = wdFindStop
            .MatchWildcards = True
            .Execute Replace:=wdReplaceAll
        End With
    Next tbl
   
End Sub
[свернуть]

Только нужно понимать, что есть два режима выделения:
1) когда выделяется непрерывная область. Например, юзер выделяет абзац с текстом 2 и затем левой мышью выделяет текст ниже;
2) когда выделяются несмежные области. Это выделяется с помощью клавиши Ctrl.

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

Что касается второго режима выделения, то в VBA-ворде нет инструментов, чтобы пройтись циклом по выделенным несмежным фрагментам. В этом случае нужно использовать какие-нибудь ухищрения. Например, можно закрасить выделенные фрагменты каким-нибудь редким цветом и затем уже работать с фрагментами, имеющими этот редкий цвет. Затем после обработки, цвет нужно удалить. Ну или можно ещё что-нибудь придумать вместо использования цвета заливки.