VBA Word - применить стиль к текстовой строке

Я пытаюсь применить стиль слова к строке текста, используя vba, чтобы он появился в оглавлении. У меня возникли проблемы с сохранением стиля, содержащегося в рассматриваемой строке, хотя, по какой-то причине весь документ улавливает стиль.

With Selection
.TypeText Text:=headername                 ' This is defined previously,
.HomeKey Unit:=wdLine, Extend:=wdMove   ' This is to move the cursor to the start of the line
.Expand wdLine                           ' This is to select the whole line
.Style = "Heading 2"                     ' this is to define the style of the selected text
.EndKey Unit:=wdLine, Extend:=wdMove      ' This is to unhighlight the text
.InsertBreak Type:=wdLineBreak            ' This is to create a line break    
 End With

Однако по какой-то причине весь документ получает название "Заголовок 2" в качестве стиля. Я пробовал множество других способов сделать это, но без удачи,

Кто-нибудь знает лучший способ сделать это или посмотреть, где я иду не так?

Спасибо

1 ответ

Решение

Невозможно применить стиль абзаца только к строке текста. Это должно быть применено к параграфу. Иногда абзац занимает только одну строку, как это, вероятно, имеет место в вашем сценарии, но важно признать разницу.

Проблема с вашим кодом заключается в том, что, учитывая порядок, в котором он выполняет действия, вставка разрыва приводит к выбору форматирования стиля и переносу его вперед.

Гораздо эффективнее и понятнее работать с объектом RANGE в Word, а не с текущим Selection. Вы можете использовать Selection в качестве отправной точки, но с этого момента ваш код должен полагаться на гораздо более предсказуемый Range (также, пользователь не увидит, как что-то "прыгает"). Например:

Dim rng as Word.Range
Set rng = Selection.Range
rng.Text = headername & vbCr 'Insert the new para at same time
Set rng = rng.Paragraphs(1).Range 'Only the first para
rng.Style = Word.WdBuiltinStyle.wdStyleHeading2 'language independent
rng.Collapse Word.WdCollapseDirection.wdCollapseEnd 
'focus in new para, which has different formatting
Другие вопросы по тегам