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