Текст с разными стилями в одном абзаце Word VBA - PullRequest
1 голос
/ 08 октября 2019

Я хочу, чтобы жирный , а не жирный текст в одной строке.

    With objWrdDoc
        .Styles.Add ("S2")
        .Styles.Add ("S3")
        .Styles("S2").Font.Bold = True
        .Styles("S3").Font.Bold = False
    End With
    With objWrdApp.Selection
        .TypeParagraph
        .Style = objWrdDoc.Styles("S2")
        .TypeText Text:="I want to have bold "
        .Style = objWrdDoc.Styles("S3")
        .TypeText Text:="and not bold text in one line."
    End With

В результате весь текст не выделен жирным шрифтом.

1 Ответ

2 голосов
/ 08 октября 2019

При работе с объектом Selection он выглядит "интуитивно понятным", при написании кода для манипулирования Word не так точно, как при использовании объектов Range. Вы можете думать о Range как о невидимом выделении, с важными отличиями в том, что код

  • может работать с несколькими Range объектами
  • , на которые пользователь не может повлиятьRange (нажатие на экран или нажатие клавиш со стрелками изменяет Selection)
  • отслеживание, где Range находится в любой заданной точке кода, является надежным

Изменение кода в вопросе для работы с «целью» Range может выглядеть следующим образом.

(Обратите внимание, что я также добавил Style объекты для определяемых стилей. Это гораздо надежнееи намного меньше набирает текст для работы с объектами, а не с такими конструкциями, как objWrdDoc.Styles("S3").)

   Dim S2 as Word.Style, S3 as Word.Style 'As Object if using late-binding
   With objWrdDoc
        Set S2 = .Styles.Add("S2")
        Set S3 = .Styles.Add("S3")
        S2.Font.Bold = True
        S3.Font.Bold = False
    End With

    Dim objRange as Word.Range 'As Object if using late-binding
    Set objRange = objWrdApp.Selection.Range

    With objRange
        .Text = vbCr 'Chr(13) = paragraph mark
        'The new text should follow the inserted paragraph mark
        'Like pressing right-arrow to "collapse" a selection
        .Collapse wdCollapseEnd

        'When working with ranges, apply the formatting after writing the text
        .Text = "I want to have bold "
        .Style = S2

        .Collapse wdCollapseEnd
        .Text = "and not bold text in one line."
        .Style = S3
    End With
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...