Я работаю над шаблоном Word 2007 с макросом, который будет применять стили символов к выделенному тексту. Казалось, что начать поиск / замену было бы неплохо, но я думаю, что нашел ошибку / ограничение, мешающее макросу работать должным образом.
Вот мой код VBA:
Sub restyleSelection()
Dim r As Range
Set r = Selection.Range
With r.Find
.Style = ActiveDocument.Styles("Default Paragraph Font")
.Text = ""
.Replacement.Text = ""
.Replacement.Style = ActiveDocument.Styles("Emphasis")
.Forward = True
.Wrap = wdFindStop
.Format = True
.MatchCase = False
.MatchWholeWord = False
.MatchWildcards = False
.MatchSoundsLike = False
.MatchAllWordForms = False
.Execute Replace:=wdReplaceAll
End With
End Sub
Если я создаю тестовый документ, который содержит несколько абзацев, и выбираю несколько слов в одном из абзацев, а затем запускаю макрос, стиль «Акцент» применяется не только к выделению, но и к концу выделения. до конца документа.
Это поведение аналогично использованию инструмента поиска / замены в графическом интерфейсе.
Мой вопрос: Как мне преодолеть эту ошибку / ограничение и применить стиль символов ТОЛЬКО в пределах выделения / диапазона?
Немного больше информации:
Что мне действительно нужно, чтобы сделать макрос, так это применить определенное форматирование ко всему выделению, сохраняя при этом существующие стили символов в выделении. Например, если выделенный текст содержит стиль символа «Полужирный», стиль символа «Курсив», а остальная часть - «Шрифт абзаца по умолчанию», макрос должен заменить «Полужирный» на «Измененный полужирный», заменить «Курсив» на «Измененный курсив» и заменить "Шрифт абзаца по умолчанию" на "Пересмотренный". Таким образом, когда я использую макрос-компаньон для «отмены» действия этого макроса, можно заменить оригинальные стили символов (полужирный, курсив, шрифт абзаца по умолчанию).
РЕШИТЬ:
Вот решение, к которому я наконец пришел:
Sub applyNewRevisedText
Dim r As Range ' Create a new Range object
Set r = Selection.Range ' Assign the current selection to the Range
Dim rng As Range
For Each rng In r.Words
Set rngStyle = rng.Style
Select Case rngStyle
Case "Bold"
rng.Style = ActiveDocument.Styles("New/Revised Text Bold")
Case "Italic"
rng.Style = ActiveDocument.Styles("New/Revised Text Emphasis")
Case Else
rng.Style = ActiveDocument.Styles("New/Revised Text")
End Select
Next rng
End Sub