Добрый день! Подскажите пожалуйста, вот есть такой макрос замены во всех таблицах.
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-ворде нет инструментов, чтобы пройтись циклом по выделенным несмежным фрагментам. В этом случае нужно использовать какие-нибудь ухищрения. Например, можно закрасить выделенные фрагменты каким-нибудь редким цветом и затем уже работать с фрагментами, имеющими этот редкий цвет. Затем после обработки, цвет нужно удалить. Ну или можно ещё что-нибудь придумать вместо использования цвета заливки.
Понятно, спасибо.