Заменить знак абзаца только тогда, когда ему предшествует текст с определенным размером шрифта MS word - PullRequest
1 голос
/ 12 июня 2019

У меня есть документ MS Word (2016), содержащий текст с разными шрифтами, как этот

Abc.q

Defq

// Abc. имеет размер шрифта = 20 пт, а q, представляющий paragraph mark, имеет размер шрифта = 10 пт

// Def имеет размер шрифта = 16 пт, а q (знак абзаца) имеет размер шрифта = 10 пт

paragraph mark эквивалентно carriage return CR (^13)

Тогда, как я могу заменить paragraph mark на string, но только для текстов с размером шрифта = 20 пт, в этом случае это только Abc., и результат будет Abc.string с использованием Advance Find / Replace или VBA?

Я пытался:

Find: ^13 --> with font 10pt
Replace: string

Но это заменяет paragraph mark на string во всех случаях. Я даже пытался создать новый стиль со шрифтом = 20.pt и в опции Стиль для следующего абзаца Я установил q Нормальный (где q представляет знак абзаца).

Спасибо за любую помощь.

1 Ответ

1 голос
/ 17 июня 2019

Это можно просто сделать (без использования Find метода), как это

Sub ReplacePara()
Dim Para As Paragraph, Xstr As String, Rng As Range
Xstr = "String to be added"
For Each Para In ActiveDocument.Paragraphs
ln = Para.Range.Characters.Count
    If ln > 1 Then
    If Para.Range.Characters(ln - 1).Font.Size = 20 Then
    Para.Range.Text = Left(Para.Range.Text, ln - 1) & Xstr
    Set Rng = ActiveDocument.Range(Start:=Para.Range.Start, End:=Para.Range.Start + ln - 1 + Len(Xstr))
    Rng.Font.Size = 20
    End If
    End If
Next
End Sub

Проверено, чтобы достичь того, что я понимаю под вашим требованием Отредактировано, чтобы назначить размер шрифта предыдущего текста (т.е. 20) для добавленной строки. Свойства имени шрифта, полужирного шрифта, курсива и т. Д. (Собранные Para.Range.Characters(ln - 1).Font........ в переменную перед заменой) также могут быть назначены добавленному тексту таким же образом.

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